列表
列表是有序的序列而且是可变对象,它包含了0个或多个对象引用。因为可变,我们可以对列表中的元素进行删除或替换操作,还可以插入、替换或删除列表中的分片。
list
数据类型可以作为函数进行调用, list()
——不指定参数将返回一个空列表;带一个 list
类型的参数将返回该参数的浅拷贝:对任意其他参数 list()
将尝试把给定的对象转换为 list
类型。该函数只能接受一个参数。列表也可以不使用 list()
函数创建,空列表可以使用空的方括号 []
来创建,包含一个或多个元素的列表则可以使用逗号分隔并且被包含在 []
中来创建。另一种创建列表的方法是使用列表生成式。
列表中所有元素实际上都是对象引用,因此列表也可以存放任意数据类型的元素,包括组合数据类型,比如列表与元组。列表可以使用标准的比较操作符 ( <
、<=
、 ==
、 !=
、 >=
、 >
) 进行比较,这种比较实际是逐项进行的(对嵌套元素,比如列表内的元组或列表,则递归进行处理)。
列表操作符
表达式 | 结果 | 描述 |
---|---|---|
[1, 2, 3] + [4, 5, 6] |
[1, 2, 3, 4, 5, 6] | 两个列表进行组合 |
[‘Hi!’] * 4 |
[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’] | 元素复制 |
3 in [1, 2, 3] |
True | 成员比较 |
for x in [1, 2, 3]: print x | 1 2 3 | 迭代 |
列表分片
1 | L = ['spam', 'Spam', 'SPAM!'] |
表达式 | 结果 | 描述 |
---|---|---|
L[2] | ‘SPAM!’ | 读取列表中第三个元素 |
L[-2] | ‘Spam’ | 读取列表中倒数第二个元素 |
L[1:] | [‘Spam’, ‘SPAM!’] | 从第二个元素开始截取列表 |
L[2] | ‘SPAM!’ | 读取列表中第三个元素 |
L[::-1] | [‘SPAM!’, ‘Spam’, ‘spam’] | 将列表倒序 |
示例
1 | a = ['zhangsan', 'lisi', 'wangwu', 'tom', 'jerry'] |
相关函数
len(L)
取得列表的长度。
max(L)
返回列表元素中的最大值,列表里面是嵌套的对象构成元素时,按照嵌套对象的元素里面的第一个元素的排列顺序,输出最大值(如果第一个元素相同,则比较第二个元素,输出最大值),按照 ASCII 码进行排序。
min(L)
返回列表元素中的最小值。
list(X)
将对象 X 转为列表。
列表常用的方法
方法 | 描述 |
---|---|
L.append(x) | 将元素 x 追加到列表 L 的尾部 |
L.count(x) | 返回元素 x 在列表 L 中出现的次数 |
L.extend(m) 或 L+=m | 将 iterable 对象m的元素和 L 进行连接 |
L.index(x, start, end) | 返回数据项x在列表 L 中(或L的start,end分片中)最左边出现的索引位置,否则会产生—个ValueError异常 |
L.insert(i, x) | 在索引位置 i 处将元素 x 插入列表 L |
L.pop() | 返回并移除列表 L 最右边的元素 |
L.pop(i) | 返回并移除L中索引位置 i 处的元素 |
L.remove(x) | 从list L中移除最左边出现的元素 x,如果找不到 x 就产生ValueError异常 |
L.reverse() | 对列表 L 进行反转 |
L.sort(…) | 对列表 L 进行排序,与内置的 sorted() 函数一样,这一方法可以接受可选的 key 与 reverse 参数 |
拆分操作符进行赋值
数据类型都可以使用序列拆分操作符 *
进行拆分。在进行赋值操时,=
左边如果有两个或多个变量时对其中的一个使用 *
进行引导,元素将赋值给对应的未使用 *
引导的变量,而所有剩下的元素将赋值给带星号的变量:
1 | 9, 2, -4, 8, 7] first, *rest = [ |
1 | "Charles Philip Arthur George Windsor".split() first, *mid, last = |
1 | "/usr/local/bin/gvim".split("/") *directories, executable = |
del语句
虽然从名称上看,del
语句代表的是删除,但是实际上 del
语句的作用并不一定是删除数据。
应用于某些对象引用(引用的是非组合类型的数据项)时,del 语句的作用是取消该对象引用到数据项的绑定,并删除对象引用,例如:
1 | 8143 # object ref.'x' created; int of value 8143 created x = |
对象引用被删除后,如果该对象引用所引用的数据项没有被其他对象引用进行引用,那么该数据项将进入垃圾收集流程。在垃圾收集是否自动进行不能确定时,如果需要进行清理,就必须自己手动进行处理。对垃圾收集的不确定性,Python 提供了两种方案,一种是使用 try ... finally
语句块,确保垃圾收集得以进行;另一种是使用 with
语句。