列表的添加

正确的方式

>>> 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
[]

列表的切片

  1. 如果省略了开始索引,则开始索引为0
  2. 如果省略了结束索引,则结束索引为列表的长度
  3. 切片生成的新的列表不会包含结束索引所对应的那个元素

索引为正数

>>> 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]
Copyright © zhujipeng 2017 all right reserved,powered by Gitbook 该文件修订时间: 2017-12-16 15:12:10

results matching ""

    No results matching ""