目录
2.3 列表:python的“苦力”
讨论列表与字符串不同的地方:列表是可变的
2.3.1 list函数
因为字符串不能像列表一样被更改,所以有时根据字符串创建列表会很有用
>>> list("Hello")
['H', 'e', 'l', 'l', 'o']
Ps:list函数是用于所有类型的序列,而不只是字符串
提前了解:转换回去:>>> ''.join(['H', 'e', 'l', 'l', 'o'])
>>> ''.join(['H', 'e', 'l', 'l', 'o'])
'Hello'
2.3.2 基本的列表操作
列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法。列表可以修改。改变列表的方法:元素赋值、元素删除、分片赋值以及列表方法。
(1)元素赋值
索引标记为某个特定的、位置明确的元素赋值
>>> x = [1,1,1]
>>> x[1]=2
>>> x
[1, 2, 1]
PS:不能为一个位置不存在的元素进行赋值;如果列表长度为2,就不能为索引为100的元素进行赋值。如果要那样做,就必须创建一个长度为101(或更长)的列表,具体参考“None、空列表和初始化”
>>> l = [None]*100
>>> l
[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]
>>> l[100]=10
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> l[99]=10
>>> l[99]
10
>>> l = [""]*100
>>> l
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']
看一下[]、[""]、[None]的区别
>>> print len([]) 打印print []*100结果是[]
0
>>> print len([""]) type("")的结果显示<type 'str'>
1
>>> print len([None]) type(None)的结果显示<type 'NoneType'>
1
(2)删除元素
从列表中删除元素很容易:使用del语句来实现
>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee', 'Earl']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee', 'Earl']
Cecil被删除。并且列表的长度由5变成了4,除了删除列表中的元素,del还能用于删除其他元素,可以用于字典元素(第四章)甚至是其他变量的删除操作(第五章)
(3)分片赋值
>>> name = list('Perl') 将找字符串转为列表,因为列表可以修改
>>> name
['P', 'e', 'r', 'l']
>>> name[2:] = list('ar')
>>> name
['P', 'e', 'a', 'r']
一次为多个元素赋值,可与源序列不等长。
>>> name = list('Perl')
>>> name[2:] = list('arsasa')
>>> name
['P', 'e', 'a', 'r', 's', 'a', 's', 'a']
也可不动元素直接插入新元素
>>> numbers = [1,5]
>>> numbers[1:1] = [2,3,4] #numbers[1]=5
>>> numbers
[1, 2, 3, 4, 5]
这个程序只是替换了一个空的分片,因此实际的操作是插入了一个序列。一次类推,通过分片赋值来删除元素是可行的(采用一个空的分片来进行替换)
>>> numbers = [1,2,3,4,5]
>>> numbers[1:4] = []
>>> numbers
[1, 5]
>>> numbers = [1,5]
#Ps:执行>>> numbers[1:] = [2,3,4] 结果为[1, 2, 3, 4] 替换numbers[1]以及之后为[2,3,4]
#执行>>> numbers[1:1] = [2,3,4]结果为[1,2,3,4,5] 替换n[1]但不包括结尾n[1],也就是插入
#执行>>> numbers[0:1] = [2,3,4]结果为[2,3,4,5] 替换n[0]但不包括结尾n[1]
#执行>>> numbers[1:2] = [2,3,4]结果为[1,2,3,4] 替换n[1]但不包括结尾n[2],本来就没n[2]
这个也可以步长设置,不过目前不是特别明白,试了一下
>>> n = [1,3,5]
>>> n[0:3:2] = [2,4]
>>> n
[2, 3, 4]
对n[0:3]进行操作,每隔1个步长操作一次(2个操作一次),也就是n[0],n[1],n[2]中先操作n[0:3]的n[0](不包括n[3]);n[0]替换成2,再隔一个n[1]不操作,n[2]=4;
下一小节接:2.3.3 列表方法
列表方法较多,比较长,单独记录一篇