列表的添加
正确的方式
>>> l = []
>>> l.append(2)
>>> l
[2]
>>> l.insert(0, 1)
>>> l
[1, 2]
>>> l.extend([3])
>>> l
[1, 2, 3]
>>> l + [4, 5, 6]
[1, 2, 3, 4, 5, 6]
>>> l
[1, 2, 3]
>>> l = l + [4, 5, 6]
>>> l
[1, 2, 3, 4, 5, 6]
extend是原地修改,+是生成新的列表
错误的方式
>>> l = []
>>> l.extend(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>> l.extend((1, 2, 3))
>>> l
[1, 2, 3]
>>> l + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> l + (1, 2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
extend支持列表和元组,+只支持列表
列表的删除
根据索引删除
>>> l = [1, 2, 3]
>>> del l[1]
>>> l
[1, 3]
>>> del l[6]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
索引不存在时会报出
IndexError的错误
根据元素删除
>>> l = [1, 2, 3]
>>> l.remove(1)
>>> l
[2, 3]
>>> l.remove(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
元素不存在时会报出
ValueError的错误
列表的访问
>>> l = [1, 2, 3]
>>> l[1]
2
>>> l
[1, 2, 3]
>>> l.pop(1)
2
>>> l
[1, 3]
>>> l[2]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
索引不存在时会报出
IndexError的错误
列表的查找
>>> l = [1, 2, 3]
>>> l.index(3)
2
>>> l.index(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 6 is not in list
元素不存在时会报出
ValueError的错误
列表的更新
修改元素
>>> l = [1, 2, 3]
>>> l[1] = 6
>>> l
[1, 6, 3]
>>> l[1:2] = [2]
>>> l
[1, 2, 3]
>>> l[1:2] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
>>> l[1:3] = [6, 7, 8]
>>> l
[1, 6, 7, 8]
>>> l[1:4] = [2, 3]
>>> l
[1, 2, 3]
添加元素
>>> l = [1, 2, 3]
>>> l[1:1] = [6]
>>> l
[1, 6, 2, 3]
>>> l[1:1] = [7, 8]
>>> l
[1, 7, 8, 6, 2, 3]
>>> l[1:1] = 9
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable
删除元素
>>> l = [1, 2, 3]
>>> l[1:1] = []
>>> l
[1, 2, 3]
>>> l[1:2] = []
>>> l
[1, 3]
>>> l[:] = []
>>> l
[]
列表的切片
- 如果省略了开始索引,则开始索引为0
- 如果省略了结束索引,则结束索引为列表的长度
- 切片生成的新的列表不会包含结束索引所对应的那个元素
索引为正数
>>> l = [1, 2, 3, 4, 5, 6]
>>> l[:]
[1, 2, 3, 4, 5, 6]
>>> l[:3]
[1, 2, 3]
>>> l[3:]
[4, 5, 6]
>>> l[0:3]
[1, 2, 3]
>>> l[3:6]
[4, 5, 6]
>>> l[0:6:2]
[1, 3, 5]
>>> l[0:7]
[1, 2, 3, 4, 5, 6]
切片时不会出现索引越界引发的报错问题
索引为负数
>>> l = [1, 2, 3, 4, 5, 6]
>>> l[-6:]
[1, 2, 3, 4, 5, 6]
>>> l[0:]
[1, 2, 3, 4, 5, 6]
>>> l[-6:0]
[]
>>> l[:-1]
[1, 2, 3, 4, 5]
>>> l[:5]
[1, 2, 3, 4, 5]
>>> l[0:-1]
[1, 2, 3, 4, 5]
>>> l[-6:-1]
[1, 2, 3, 4, 5]
>>> l[-1:-6]
[]
>>> l[0:-1:2]
[1, 3, 5]
>>> l[0:-1:-2]
[]
负数索引的会根据长度转化为正数后处理
列表的迭代
错误的迭代方式
>>> l = [1, 2, 3, 4, 5, 6]
>>> for i in l:
... print i
... l.remove(i)
...
1
3
5
>>> l
[2, 4, 6]
for遍历和remove函数会同时影响索引
正确的迭代方式
>>> l = [1, 2, 3, 4, 5, 6]
>>> while l:
... print l.pop(0)
...
1
2
3
4
5
6
>>> l
[]
>>> l = [1, 2, 3, 4, 5, 6]
>>> while l:
... print l.pop()
...
6
5
4
3
2
1
>>> l
[]
列表推导式
>>> l = [1, 2, 3, 4, 5, 6]
>>> l = [i for i in l if i % 2 == 1]
>>> l
[1, 3, 5]
重复列表元素
>>> l = [1, 2]
>>> l = l * 3
>>> l
[1, 2, 1, 2, 1, 2]