四、列表
1、列表简介
1)举例:
L=['表项1','表项2','表项3','表项4']
2)空列表
[]
3)列表的正数下标
L=['a','b','c']
其列表对应的下标为:L[0],L[1],L[2]
注意:
下标的值不能大于或等于列表中值的个数,否则报错:IndexError。
下标的值只能是整数,不能是浮点数,否则报错:TypeError。
>>> L=['a','b','c']
>>> L[0]
'a'
>>> L[3]
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
L[3]
IndexError: list index out of range
>>> L[2.5]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
L[2.5]
TypeError: list indices must be integers, not float
>>>
4)列表的负数下标
>>> L=['a','b','c']
>>> L[-1]
'c'
>>> L[-2]
'b'
>>> L[-3]
'a'
>>> L[-4]
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
L[-4]
IndexError: list index out of range
注意:
负数下标从-1开始,-1指的是列表的最后一个下标,以此类推;
负数下标的绝对值不能大于列表中值的个数,否则报错:IndexError。
5)利用切片’ : '取得子列表
>>> L=['a','b','c']
>>> L[0:3]
['a', 'b', 'c']
>>> L[0:2]
['a', 'b']
>>> L[0:]
['a', 'b', 'c']
>>> L[:3]
['a', 'b', 'c']
>>> L[-2:]
['b', 'c']
>>> L[-2:3]
['b', 'c']
>>> L[:]
['a', 'b', 'c']
注意:
L[A:B]:从A下标开始(包括A下标),截至B下标结束(不包括B下标)。
L[A:]: 从A下标开始(包括A下标),截至列表的长度值结束。
L[:B]: 从下标0开始(包括0下标),截至B下标结束(不包括B下标)。
L[:]: 从下标0开始(包括0下标),截至列表的长度值结束。
6)获取列表的长度 len()
>>> L=['a','b','c']
>>> len(L)
3
7)使用下标改变列表中的值
>>> L=['a','b','c']
>>> L
['a', 'b', 'c']
>>> L[0]=1
>>> L[1]=2
>>> L[2]=3
>>> L
[1, 2, 3]
>>>
8)列表的连接’ + ‘和复制’ * ’
>>> L=['A','B']
>>> H=['1','2']
>>> L*2
['A', 'B', 'A', 'B']
>>> L=L+H
>>> L
['A', 'B', '1', '2']
>>> H
['1', '2']
>>> H=H*2
>>> H
['1', '2', '1', '2']
9)从列表中删除值
>>> L=['1','2','3','4','5','6']
>>> L
['1', '2', '3', '4', '5', '6']
>>> del L[5]
>>> L
['1', '2', '3', '4', '5']
>>> del L[2:]
>>> L
['1', '2']
10)列表可以跨越多行,且这些行的缩进不重要,没有结束方括号,列表就没有结束
>>> L=[
12,'123',
'帅哥',
'美女',
]
>>> L
[12, '123', '帅哥', '美女']
2、列表的使用
1)列表用于循环
for i in [0,1,3,5]:
print(i)
2)in 和not in操作符
>>> L=['a','b','c']
>>> 'a' in L
True
>>> 'd' in L
False
>>> 'd' not in L
True
>>>
3)多重赋值
使用一行代码,用列表中的值为多个变量赋值
>>> L=['小明','帅哥','23']
>>> name,remark,age=L
>>> name
'小明'
>>> remark
'帅哥'
>>> age
'23'
注意:变量的数目和列表的长度必须严格相等,否则报错:ValueError。
4)增强的操作符
>>> L=['a','b']
>>> L
['a', 'b']
>>> L+='c'
>>> L
['a', 'b', 'c']
>>> L*=2
>>> L
['a', 'b', 'c', 'a', 'b', 'c']
注意:+=操作符此时用于列表的连接,*=操作符完成列表的复制
3、列表的方法
1)index()方法:查找列表值中对应的下标
>>> L=['a','b','b']
>>> L.index('a')
0
>>> L.index('b')
1
>>> L.index('c')
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
L.index('c')
ValueError: 'c' is not in list
注意:使用index(A) 方法时:
如果A不在列表中,则报错:ValueError
如果A在列表中重复,则方法返回A第一次出现在列表中的下标。
2)append()方法:将参数添加到列表末尾
>>> L=['A','B','C']
>>> L
['A', 'B', 'C']
>>> L.append('D')
>>> L
['A', 'B', 'C', 'D']
3)insert()方法:在列表的任意下标处插入一个值
>>> L=['a','b','c']
>>> L
['a', 'b', 'c']
>>> L.insert(1,'*')
>>> L
['a', '*', 'b', 'c']
注意:insert(参数1,参数2)方法中,参数1是新值的下标,参数2是要插入的新值
4)remove()方法:从列表中删除值
>>> L=['a','b','c']
>>> L
['a', 'b', 'c']
>>> L.insert(1,'*')
>>> L
['a', '*', 'b', 'c']
>>> L=['a','b','c']
>>> L
['a', 'b', 'c']
>>> L.remove('a')
>>> L
['b', 'c']
注意:
给remove传入的是一个值;
试图删除列表中不存在的值,将导致ValueError错误。
如果该值在列表中出现多次,只有第一次出现的值会被删除。
如果知道删除值在列表中的下标,使用:del语句
5)sort()方法将列表中的值排序
sort()默认排序
>>> L=['a','f','c']
>>> L.sort()
>>> L
['a', 'c', 'f']
>>> L=['3','5.5','2']
>>> L.sort()
>>> L
['2', '3', '5.5']
>>> L=[1,2,0,'d','adf','c']
>>> L.sort()
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
L.sort()
TypeError: unorderable types: str() < int()
注意:
sort()方法当场对列表排序,千万不要写成 L=L.sort() 这样的代码,来试图记录返回值。
sort()方法不能对机油数字,又有字符串值的列表排序,否则会报错:TypeError。
sort()方法对字符串排序时,默认使用‘ASCIl字符顺序’,并非实际的字典顺序。
sort()方法按逆序排序
>>> L=['a','b','c']
>>> L.sort(reverse=True)
>>> L
['c', 'b', 'a']
sort()方法按普通字典顺序排序
>>> L=['C','a','A']
>>> L.sort(key=str.lower)
>>> L
['a', 'A', 'C']
4、类似列表的类型:字符串和元组
1)字符串和列表的区别
相同点:按下标取值,切片,for循环,len(),in,not in,多重赋值,增强操作符,index()方法
不同点:字符串没有append(),insert(),remove(),sort()方法,无法利用下标改变字符串的值。
2)元组数据类型和列表的区别
同上字符串与列表的区别:
相同点:按下标取值,切片,for循环,len(),in,not in,多重赋值,增强操作符,index()方法
不同点:字符串没有append(),insert(),remove(),sort()方法,无法利用下标改变字符串的值。
注意:如果元组中只有一个值,你可以在括号内该值的后面跟上一个逗号,表明这种
情况。否则,Python 将认为,你只是在一个普通括号内输入了一个值。
>>> type(('1'))
<class 'str'>
>>> type(('1',))
<class 'tuple'>
3)list()和tuple()转换类型
字符串转列表举例:list()
>>> L='abcdef'
>>> list(L)
['a', 'b', 'c', 'd', 'e', 'f']
>>> L
'abcdef'
>>> L=list(L)
>>> L
['a', 'b', 'c', 'd', 'e', 'f']
元组转列表举例:list()
>>> L=('1','2','3')
>>> list(L)
['1', '2', '3']
>>> L
('1', '2', '3')
>>> L=list(L)
>>> L
['1', '2', '3']
字符串转元组举例:tuple()
>>> y='1234'
>>> tuple(y)
('1', '2', '3', '4')
>>> y
'1234'
>>> y=tuple(y)
>>> y
('1', '2', '3', '4')
列表转元组举例:tuple()
>>> y=[1]
>>> tuple(y)
(1,)
>>> y
[1]
>>> y=tuple(y)
>>> y
(1,)
5、引用
>>> L=['a','b','c']
>>> L
['a', 'b', 'c']
>>> A=L
>>> A
['a', 'b', 'c']
>>> L[0]='1'
>>> L
['1', 'b', 'c']
>>> A
['1', 'b', 'c']
>>> A[0]='2'
>>> A
['2', 'b', 'c']
>>> L
['2', 'b', 'c']
可以理解为:把集合看成一个箱子,箱子里装了‘a’,‘b’,‘c’ 三个球,并给箱子贴上了L便签,后来又给箱子贴上了A便签,无论怎样操纵箱子里的小球,箱子里小球都会随之变化。
1)copy模块中的copy()函数
>>> import copy
>>> L=['o','o',['o','o']]
>>> L
['o', 'o', ['o', 'o']]
>>> H=copy.copy(L)
>>> H
['o', 'o', ['o', 'o']]
>>> H[0]='x'
>>> H
['x', 'o', ['o', 'o']]
>>> L
['o', 'o', ['o', 'o']]#注意H变化前后L的值
>>> H[2][0]='x'
>>> H
['x', 'o', ['x', 'o']]
>>> L
['o', 'o', ['x', 'o']]#注意H边话前后L的值
2)copy模块中deepcopy()函数
>>> import copy
>>> L=['o','o',['o','o']]
>>> L
['o', 'o', ['o', 'o']]
>>> H=copy.deepcopy(L)
>>> H
['o', 'o', ['o', 'o']]
>>> H[0]='x'
>>> H
['x', 'o', ['o', 'o']]
>>> L
['o', 'o', ['o', 'o']]#注意H变化前后L的值
>>> H[2][0]='x'
>>> H
['x', 'o', ['x', 'o']]
>>> L
['o', 'o', ['o', 'o']]#注意H变化前后L的值
>>>
对比 1) 2)可知,deepcopy() 函数同时会复制列表内部的列表。