Python的组合数据类型-列表

列表

列表是有序的序列而且是可变对象,它包含了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
2
3
4
5
a = ['zhangsan', 'lisi', 'wangwu', 'tom', 'jerry']
print(a[1:]) # 从左向右取到最后
print(a[1:-1]) # 从左向右取到倒数第二个值
print(a[1:-1:1]) # 从左向右取到倒数第二个值,步进长度为1去取
print(a[1::2]) # 从左向右取到最后,步进长度为2

相关函数

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
2
3
4
5
>>> first, *rest = [9, 2, -4, 8, 7]
>>> first
9
>>> rest
[2, -4, 8, 7]
1
2
3
4
5
6
7
>>> first, *mid, last = "Charles Philip Arthur George Windsor".split()
>>> first
'Charles'
>>> mid
['Philip', 'Arthur', 'George']
>>> last
'Windsor'
1
2
3
4
5
>>> *directories, executable = "/usr/local/bin/gvim".split("/")
>>> directories
['', 'usr', 'local', 'bin']
>>> executable
'gvim'

del语句

虽然从名称上看,del 语句代表的是删除,但是实际上 del 语句的作用并不一定是删除数据。

应用于某些对象引用(引用的是非组合类型的数据项)时,del 语句的作用是取消该对象引用到数据项的绑定,并删除对象引用,例如:

1
2
3
4
5
6
7
8
>>> x = 8143 # object ref.'x' created; int of value 8143 created
>>> x
8143
>>> del x
>>> x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined

对象引用被删除后,如果该对象引用所引用的数据项没有被其他对象引用进行引用,那么该数据项将进入垃圾收集流程。在垃圾收集是否自动进行不能确定时,如果需要进行清理,就必须自己手动进行处理。对垃圾收集的不确定性,Python 提供了两种方案,一种是使用 try ... finally 语句块,确保垃圾收集得以进行;另一种是使用 with 语句。

有钱任性,请我吃包辣条
0%