列 表 用 于 存 储 任 意 数目、任意类型的数据集合。在 Python 中,用方括号([])来表示列表,并用逗号来分隔其中的元素。
1、创建列表
(1)基本语法创建
a = []
创建整数列表:
a = [1, 2, 3, 4]
同一个列表中不仅可以包含相同类型的元素,还可以包含不同类型的值。
创建包含不同类型的列表:
a = [1, 2, 'abc', True, 3.14]
(2)list()创建
a = list()
使用 list()可以将任何可迭代的数据转化成列表。
a = list() # 创建一个空的列表对象
b = list("hello,world")
print(a) # []
print(b) # ['h', 'e', 'l', 'l', 'o', ',', 'w', 'r', 'l', 'd']
(3)range()生成列表
range([start,] end [,step]
其中:
start 参数:可选,表示起始数字,默认是 0;
end 参数:必选,表示结尾数字;
step参数:可选,表示步长,默认为 1。
list(range(1,10)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(4)列表生成式
[表达式 for item in 可迭代对象]
[x for x in range(1,10) if x%2 == 0] # [2, 4, 6, 8]
2、基本操作
(1)添加
① append():列表的末尾追加一个新对象,每次只能是添加一个元素
a = [1, 2, 3, 4]
a.append(6) # [1, 2, 3, 4, 6]
② +运算符操作:会创建一个新的列表对象,涉及到大量的复制操作,对于操作大量的元素不建议使用
例:List1+List2
a = [1, 2, 3, 4]
b = [5, 6, 7]
a+b # [1, 2, 3, 4, 5, 6, 7]
③ extend():将将目标列表的所有元素添加到本列表的尾部,属于原地操作,不创建新的列表对象,可添加一个列表或者一个元素
a = [1, 2, 3, 4]
b = [5, 6, 7]
a.extend(b) # [1, 2, 3, 4, 5, 6, 7]
a.extend('8') # [1, 2, 3, 4, 5, 6, 7, '8']
④ insert():将指定的元素插入到列表对象的任意指定位置。这样会让插入位置后面所有的元素进行移动,会影响处理速度。涉及大量元素时,尽量避免使用。类似发生这种移动的函数还有:remove()、pop()、del(),它们在删除非尾部元素时也会发生操作位置后面元素的移动。
a = [1, 2, 3, 4]
a.insert(2, 10) # 在列表a的索引2处插入元素10 # [1, 2, 10, 3, 4]
(2)查找
① 通过索引直接访问元素
序列中的所有元素都是有索引的,编号从0 开始递增,最大到列表的长度减1。序列中的所有元素都可以通过索引访问。其中超出索引范围,会抛出异常。
a = [1, 2, 3, 4]
a[0] # 获取列表a中索引为0的元素,即列表中第1个元素 1
a[-1] # 获取列表a中索引为-1的元素,即列表中最后1个元素 4
② index()获取指定元素在列表中首次出现的索引
语法是:
index(value,[start,[end]])
其中start,end为指定的搜索范围。
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
a.index(20) # 从列表中搜索第一个20的位置 1
a.index(20, 2) # 从列表索引位置2开始往后搜索第一个20的位置 6
a.index(20, 4, 7) # 从列表索引位置4到7这个范围,搜索第一个20的位置 6
(3)修改
修改列表中的某一个元素,可以像使用数组一样对列表中的特定元素赋值,也就是使用一对中括号指定元素在列表中的索引,然后使用赋值运算符(=)进行赋值。
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
a[0] = ‘dhasaiidas’ # 修改列表a中第一个元素为dhasaiidas ['dhasaiidas', 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
(4)删除
① del 删除
del 删除列表指定位置的元素。
语法格式:del 元素。
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
del a[2] # [1, 20, 4, 10, 30, 20, 50, 30, 3, 5, 1]
② pop 删除
pop()删除并返回指定位置元素,如果未指定位置则默认操作列表最后一个元素。
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
b=a.pop() # 删除最后一个元素 1
c=a.pop(2) # 删除下标为2的元素 3
③ remove 删除
删除首次出现的指定元素,若不存在该元素抛出异常。
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
a.remove(20) # 删除列表a中第一次出现的元素20 [1, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
(5)乘法
列表乘以一个数字n 会生成新的列表,在新的列表中原来的列表将会被重复n 次。
a = [1, 2, 3, 4]
b=a*3 # 返回的值是 将列表a复制了3次 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
乘法的作用为复制的用法还可以使用在字符串上。
(6)列表的长度、最大值和最小值
len、max和min这三个函数用于返回列表中元素的数量、列表中最大值、列表中的最小值。如果列表中同时包含整数和字符串类型的元素,那么使用max、min 函数就会抛出异常。
3、切片操作
切片操作是从列表A 中获取一个子列表B。从A 中获取B,需要指定B 在A 中的开始索引和结束索引,因此,切片操作需要指定两个索引。对于列表的切片操作和字符串类似。切片是Python 序列及其重要的操作,适用于列表、元组、字符串等等。切片的语法格式如下:
列表[起始偏移量start : 终止偏移量end [:步长step]]
当start, end, step三个值为正数时
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
print(a[:]) # 默认从列表的开始到列表结束 ,步长为 1 [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
print(a[1:]) # 从列表的索引 1 开始到结束,步长为 1 [20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
print(a[:2]) # 从开始到索引 1,步长为 1 [1, 20]
print(a[1:3]) # 从列表索引 1 开始到索引 2,步长为 1 [20, 3]
print(a[1:6:2]) # 从列表索引 1 开始到索引 5,步长为 2 [20, 4, 30]
当start, end, step三个值为负数时
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
print(a[-2:]) # 从列表的倒数第 2 个开始到列表结束 [5, 1]
print(a[-5:-3]) # 从倒数第 5 个开始到倒数第 4 个 [50, 30]
print(a[::-1]) # 从右到左反向提取 [1, 5, 3, 30, 50, 20, 30, 10, 4, 3, 20, 1]
4、常用方法
5、列表遍历
列表创建后,可以使用循环进行遍历获取列表中的每个元素。
#for 循环遍历列表
a = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
for value in a:
print(value)
#while 循环遍历列表
my_list = [1, 20, 3, 4, 10, 30, 20, 50, 30, 3, 5, 1]
# 定义变量
index = 0
# 定义变量记录列表元素个数
l = len(my_list)
while index < l:
# 通过下标索引获取元素
value = my_list[index]
print(value)
index+=1
6、 enumerate()函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for 循环当中。enumerate() 方法的语法格式如下所示:
enumerate (sequence,[start=0])
其中sequence 表示一个序列、迭代器或其他支持迭代对象;start 表示下标起始位置。
seq = ['one', 'two','three']
for i, element in enumerate(seq):
print(i,element)
# 0 one
# 1 two
# 2 three