3.5 列表及相关操作
列表也称序列,是Python中使用最频繁的数据类型。列表中的每个元素都分配一个数字,称列表位置,列表元素也称列表成员。在列表索引中,第一个索引是0,第二个索引是1,依此类推。
1.创建列表
前面我们给大家介绍了字符串数据就是一个存放单字母的特殊列表,这里介绍的列表可以存放任何数据,而且列表允许有相同的元素。
我们可以用列表推导式来创建列表,其格式如下:
变量var = [<生成元素表达式> for <元素x> in <元素列表list> if <过滤条件>]
例如(示例3-37):
multiples = [i for i in range(30)if i % 3 is 0] print(multiples)
程序运行结果:
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
创建列表,示例3-38。
#列表变量一般用方括号[]或list()函数创建 list1 = ['Google', ’股票’, 600088, 20.88, 20.88] list2 =[x for x in range(10)] #列表推导式 print(list1) print(list2)
程序运行结果:
['Google', ’股票’, 600088, 20.88, 20.88] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2.访问列表中的元素
要访问列表中的元素,需要使用方括号连同索引或索引切片获得索引对应可用的值,见示例3-39。
#访问列表中的元素 list1 = ['Google', ’股票’, 600088, 20.88, 20.88] list2 =[x for x in range(10)] #列表推导式 print("list1[0]: ", list1[0]) print("list2[1:5]: ", list2[1:5])
程序运行结果:
list1[0]: Google list2[1:5]: [1, 2, 3, 4]
3.修改列表中的元素
由于列表有索引号,即下标,所以可以通过索引号来修改列表中的元素,见示例3-40。
#修改列表中的元素 list1 = ['Google', ’股票’, 600088, 20.88, 20.88] list1[1]=600080 print("list1修改元素: ", list1)
程序运行结果:列表元素“股票”更新为600080。
list1修改元素: ['Google', 600080, 600088, 20.88, 20.88]
4.增加列表中的元素
列表append()方法可以增加列表元素,见示例3-41。
#增加列表元素 list1.append('Hepu') list1.append(2775205) print("list1追加元素: ", list1)
程序运行结果:
list1追加元素: ['Google',600080,600088,20.88,20.88, 'Hepu',2775205]
5.列表中插入元素
列表insert()方法可以插入新元素。插入后,当前索引号及后面的元素后移,见示例3-42。
#插入列表元素 list1 =['Google', 600080, 600088, 20.88, 20.88, 'Hepu', 2775205] list1.insert(5, 600080) print('list1插入元素: ', list1)
程序运行结果:
list1插入元素: ['Google', 600080, 600088, 20.88, 20.88, 600080, 'Hepu', 2775205]
6.删除列表中的元素
删除列表中的元素有两种方式:按值删除和按索引号删除。
1)按值删除
使用列表remove()方法从表头开始删除第1个值相同的元素,后面相同的值还存在。例如,list1.remove(600080)。
2)按索引号
使用del语句按索引号删除列表中的元素。例如,del list1[0],见示例3-43。
list1=['Google', 600080, 600088, 20.88, 20.88, 600080, 'Hepu', 2775205] print(’删除600080前为 : ', list1) list1.remove(600080) print(’删除第1个600080后为 : ', list1) list1.remove(600080) print(’删除第2个600080后为 : ', list1) del list1[0] print('del list1[0]后为 : ', list1)
程序运行结果:删除前,在列表list1中存在两个相同的元素600080。
删除600080前为 : ['Google',600080,600088,20.88,20.88,600080, 'Hepu', 2775205] 删除第1个600080后为 : ['Google', 600088, 20.88, 20.88, 600080, 'Hepu', 2775205] 删除第2个600080后为 : ['Google', 600088, 20.88, 20.88, 'Hepu', 2775205] del list1[0]后为 : [600088, 20.88, 20.88, 'Hepu', 2775205]
7.列表相关操作
1)列表运算符“+”和“*”
在列表中,“+”和“*”运算符的作用与字符串相似,其中“+”号用于组合列表,“*”号用于重复列表。
例如示例3-44。
a=[1,2,3,4] b=['a', 'b', 'c'] c=a+b print('c=a+b= ', c) d=a*5 print('d=', d)
程序运行结果:
c=a+b= [1, 2, 3, 4, 'a', 'b', 'c'] d= [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
2)列表切片
列表切片的操作也与字符串相似。
切片格式:
列表[start:[end:[step]]]
其中,中间的两个中括号表示可省略的参数,start表示开始位置,end表示结束位置,step表示取值步长。
下面看示例3-45。
b=[x for x in range(10)] print('b= ', b) print('b[0]=', b[0]) print('b[2]=', b[2]) print('b[-2]=', b[-2]) print('b[:5]= ', b[:5]) print('b[5:]= ', b[5:]) print('b[-3:]= ', b[-3:]) print('b[:-3]= ', b[:-3]) print('b[4:7]= ', b[4:7]) print('b[0:10:3]= ', b[0:10:3])
程序运行结果:
b= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] b[0]= 0 b[2]= 2 b[-2]= 8 b[:5]= [0, 1, 2, 3, 4] b[5:]= [5, 6, 7, 8, 9] b[-3:]= [7, 8, 9] b[:-3]= [0, 1, 2, 3, 4, 5, 6] b[4:7]= [4, 5, 6] b[0:10:3]= [0, 3, 6, 9]
3)列表in语句
列表in语句用来判断一个元素是否在列表中存在。如果存在则返回True,如果不存在则返回False。见示例3-46。
#列表in语句 print('2 in [1, 2, 3] 结果 ',2 in [1, 2, 3]) print('5 in [1, 2, 3] 结果 ',5 in [1, 2, 3])
程序运行结果:
2 in [1, 2, 3] 结果 True 5 in [1, 2, 3] 结果 False
4)列表比较符“==”
列表比较符“==”能够用来比较两个列表是否相同。如果相同则返回True,否则返回False。见示例3-47。
#列表比较符== a='abc' b="abc" f= a==b g= a! =b print(’列表比较f= ', f) print(’列表比较g= ', g)
程序结果如下:
列表比较f= True 列表比较g= False
5)列表嵌套
列表能够嵌套。嵌套列表就是列表中的元素也是一个列表。见示例3-48。
#列表合并,列表操作符+ a=['a',80,12.8] b=[1,2,3] c=a+b print('c= a+b = ', c) #列表操作符* d=[1,2] e=d*3 #注意不是列表元素值*3,是列表元素个数*3 print('e= d*3 = ', e) #列表in语句 print('2 in [1, 2, 3] 结果 ',2 in [1, 2, 3]) #列表切片 print(’切片c[2] ', c[2]) print(’切片c[-2] ', c[-2]) print(’切片c[1:] ', c[1:]) #列表比较符== f= a==b print(’列表比较f= a==b = ', f) #嵌套列表 x = ['a', 'b', 'c'] y = [1, 2, 3] z = [x, y] print(’嵌套列表z= ', z)
程序运行结果:
c= a+b= ['a', 80, 12.8, 1, 2, 3] e= d*3 = [1, 2, 1, 2, 1, 2] 2 in [1, 2, 3] 结果 True 切片c[2] 12.8 切片c[-2] 2 切片c[1:] [80, 12.8, 1, 2, 3] 列表比较f= a==b = False 嵌套列表z= [['a', 'b', 'c'], [1, 2, 3]]
8.列表相关函数和方法
列表相关函数的种类及意义见表3-22。
表3-22 列表相关函数和方法
9.列表迭代操作
Python的迭代操作就是利用列表有序特性进行迭代输出。
迭代器是一个可以记住遍历位置的对象。
迭代器从列表的第一个元素开始访问,直到所有的元素被访问完,而且只能往前不会后退。字符串、列表和元组对象都可用于创建迭代器。
迭代器有两个基本函数:iter()函数和next()函数。
iter()函数:创建迭代器对象,并且指针指向第一个元素。
next()函数:输出当前指针元素,并且使迭代器指针指向下一个元素。
一般我们用for语句作列表遍历操作。可参见示例3-49。
list1=[x for x in range(10)] #使用for循环 for i in list1: print(i, end=" ")
如果使用迭代器,就可以使用while语句作列表遍历操作。见示例3-50。
list1=[x for x in range(10)] #使用迭代器,用while循环 it = iter(list1) i=0 while i<len(list1): print(next(it), end=" ") i+=1
上面两个程序运行的结果是相同的。
上面复杂的循环操作,只需要一行for循环语句就能实现。见示例3-51。
list1=[x for x in range(10)] #使用for循环 print(’使用for循环’) for i in list1: print(i*2, end=" ") print() #使用迭代器,用while循环 print(’使用迭代器,用while循环’) it = iter(list1) i=0 while i<len(list1): print(next(it)*2, end=" ") i+=1 print() #for循环语句迭代命令 print('for循环语句命令’) for x in list1: x=x*2; print(x, end=" ")
程序运行结果:
使用for循环 0 2 4 6 8 10 12 14 16 18 使用迭代器,用while循环 0 2 4 6 8 10 12 14 16 18 for循环语句命令 0 2 4 6 8 10 12 14 16 18