列表和元组
初始化
Python 的列表与 Java、C 等其他语言的数组非常相似,是对象的有序集合。
x = [1, 2, 3]
与很多其他语言的列表不同,Python 的列表可以包含不同类型的元素,列表元素可以是任意的 Python 对象。
len() 函数返回列表的元素数量。
索引
Python 从 0 开始计数,索引为 0 将返回列表的第一个元素,索引为 1 则返回第二个元素,依此类推。
>>> x = ["first", "second", "third", "fourth"]
>>> x[0]
'first'
>>> x[2]
'third'
如果索引为负数,表示从列表末尾开始计数的位置,其中 -1 是列表的最后位置,-2 是倒数第二位,依此类推。
切片
就像索引可以从列表中取得单个值一样,切片 可以从列表中取得多个值,结果是一个新列表。
list[index1:index2]
提取 index1(含)和上限至 index2(不含)之间的所有数据项,并放入一个新列表中。
>>> x = ["first", "second", "third", "fourth"]
>>> x[1:-1]
['second', 'third']
>>> x[0:3]
['first', 'second', 'third']
>>> x[-2:-1]
['third']
在对列表进行切片时,还可以省略 index1 或 index2。省略 index1 表示“从列表头开始”,而省略 index2 则表示“直到列表末尾为止”。如果两个索引都省略了,将会由原列表从头至尾创建一个新列表,即列表复制。
修改
>>> x = [1, 2, 3, 4]
>>> x[1] = "two"
>>> x
[1, 'two', 3, 4]
append
向列表添加单个元素。
>>> x = [1, 2, 3]
>>> x.append("four")
>>> x
[1, 2, 3, 'four']
extend
将列表追加到另一个列表之后。
>>> x = [1, 2, 3, 4]
>>> y = [5, 6, 7]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6, 7]
>>> x = [1, 2, 3, 4]
>>> x[len(x):] = [5, 6, 7]
>>> x
[1, 2, 3, 4, 5, 6, 7]
insert
可以在两个现有元素之间或列表之前插入新的元素。
>>> x = [1, 2, 3]
>>> x.insert(2, "hello")
>>> print(x)
[1, 2, 'hello', 3]
当 n 是非负值时,list.insert(n, elem) 与 list[n:n] = [elem] 的效果是一样的。
del
删除列表数据项。
>>> x = ['a', 2, 'c', 7, 9, 11]
>>> del x[1]
>>> x
['a', 'c', 7, 9, 11]
>>> del x[:2]
>>> x
[7, 9, 11]
通常,del list[n] 的功能与 list[n:n+1] = [] 是一样的,而 del list[m:n] 的功能则与 list[m:n] = [] 相同。
remove
在列表中查找给定值的第一个实例,然后将该值从列表中删除。
>>> x = [1, 2, 3, 4, 3, 5]
>>> x.remove(3)
>>> x
[1, 2, 4, 3, 5]
如果 remove 找不到要删除的的值,就会引发错误。可以用 Python 的异常处理机制来捕获错误,也可以在做 remove 之前,先用 in 检查一下要删除的值是否存在,以避免错误的发生。
reverse
列表逆序。
>>> x = [1, 3, 5, 6, 7]
>>> x.reverse()
>>> x
[7, 6, 5, 3, 1]
排序
sort
>>> x = [3, 8, 4, 0, 2, 1]
>>> x.sort()
>>> x
[0, 1, 2, 3, 4, 8]
sort 方法可以对任何对象进行排序,因为 Python 几乎可以对任何对象进行比较。但是在排序时有一点需要注意:sort 用到的默认键方法要求,列表中所有数据项均为可比较的类型。这意味着,如果列表同时包含数字和字符串,那么使用 sort 方法将会引发异常!
自定义排序
定义函数,按照每个单词的字符数对单词列表进行排序。
def compare_num_of_chars(string1):
return len(string1)
>>> word_list = ['Python', 'is', 'better', 'than', 'C']
>>> word_list.sort(key=compare_num_of_chars)
>>> print(word_list)
['C', 'is', 'than', 'Python', 'better']
sorted
列表内置了排序方法,但 Python 的其他可迭代对象(如字典的键),就没有 sort 方法。Python 还内置有 sorted() 函数,能够从任何可迭代对象返回有序列表。和列表的 sort 方法一样,sorted() 函数同样也用到了参数 key 和 reverse:
>>> x = (4, 3, 1, 2)
>>> y = sorted(x)
>>> y
[1, 2, 3, 4]
>>> z = sorted(x, reverse=True)
>>> z
[4, 3, 2, 1]
常用方法
方法 | 说明 | 示例 |
---|---|---|
[] | 创建空列表 | x = [] |
len | 返回列表长度 | len(x) |
append | 在列表末尾添加一个元素 | x.append('y') |
extend | 在列表末尾添加另一个列表 | x.extend(['a', 'b']) |
insert | 在列表的指定位置插入一个新元素 | x.insert(0, 'y') |
del | 删除一个列表元素或切片 | del(x[0]) |
remove | 检索列表并移除给定值 | x.remove('y') |
reverse | 原地将列表逆序 | x.reverse() |
sort | 原地对列表排序 | x.sort() |
+ | 将两个列表拼接在一起 | x1 + x2 |
* | 将列表复制多份 | x = ['y'] * 3 |
min | 返回列表中的最小元素 | min(x) |
max | 返回列表中的最大元素 | max(x) |
index | 返回某值在列表中的位置 | x.index['y'] |
count | 对某值在列表中出现的次数计数 | x.count('y') |
sum | 对列表数据项计算合计值(如果可以合计的话) | sum(x) |
in | 返回某数据项是否为列表的元素 | 'y' in x |
元组
元组是与列表非常相似的数据结构。但是元组只能创建,不能修改。
单个元素的元组应加上逗号
>>> x = 3
>>> y = 4
>>> (x + y) # 此行代码将把 x 和 y 相加
7
>>> (x + y,) # 跟了逗号就意味着,圆括号是用来标识元组的
(7,)
>>> () # 用成对的空的圆括号创建一个空元组
()
打包和拆包
Python 允许元组出现在赋值操作符的左侧,这时元组中的变量会依次被赋予赋值操作符右侧元组的元素值。
>>> (one, two, three, four) = (1, 2, 3, 4)
>>> one
1
>>> two
2
可以简写为:
one, two, three, four = 1, 2, 3, 4
temp = var1
var1 = var2
var2 = temp
可简写为:
var1, var2 = var2, var1
列表和元组的相互转换
>>> list((1, 2, 3, 4))
[1, 2, 3, 4]
>>> tuple([1, 2, 3, 4])
(1, 2, 3, 4)
>>> list("Hello")
['H', 'e', 'l', 'l', 'o']