一、简介
列表(list)是Python以及其他语言中最常用到的数据结构之一。Python使用使用中括号 [ ] 来解析列表。列表是可变的(mutable)——可以改变列表的内容。
二、基本的列表操作
列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法。本文介绍一些可以改变列表的方法。
1. list 函数
通过 list(seq) 函数把一个序列类型转换成一个列表。
>>> list(‘hello‘) [‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘]list 函数使用于所有类型的序列,而不只是字符串。
2. 改变列表:元素赋值
使用索引标记来为某个特定的、位置明确的元素赋值。
>>> x = [1, 1, 1] >>> x[1] = 2 >>> x [1, 2, 1]不能为一个位置不存在的元素进行赋值。
3. 删除元素
从列表中删除元素也很容易:使用 del 语句来实现。
>>> names = [‘Alice‘, ‘Beth‘, ‘Cecil‘, ‘Dee-Dee‘, ‘Earl‘] >>> del names[2] >>> names [‘Alice‘, ‘Beth‘, ‘Dee-Dee‘, ‘Earl‘]除了删除列表中的元素,del 语句还能用于删除其他元素。
4. 分片赋值
>>> name = list(‘Perl‘) >>> name [‘P‘, ‘e‘, ‘r‘, ‘l‘] >>> name[2:] = list(‘ar‘) >>> name [‘P‘, ‘e‘, ‘a‘, ‘r‘]在使用分片赋值时,可以使用与原序列不等长的序列将分片替换:
>>> name = list(‘Perl‘) >>> name[1:] = list(‘ython‘) >>> name [‘P‘, ‘y‘, ‘t‘, ‘h‘, ‘o‘, ‘n‘]分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素。
>>> numbers = [1, 5] >>> numbers[1:1] = [2, 3, 4] >>> numbers [1, 2, 3, 4, 5]通过分片赋值来删除元素也是可行的。
>>> numbers [1, 2, 3, 4, 5] >>> numbers[1:4] = [] >>> numbers [1, 5]三、列表方法
方法是一个与某些对象有紧密联系的函数。一般,方法可以这样进行调用:
对象.方法(参数)
除了对象被放置到方法名之前,并且两者之间用一个点号隔开。
1. append
append方法用于在列表末尾追加新的对象:
>>> lst = [1, 2, 3] >>> lst.append(4) >>> lst [1, 2, 3, 4]append方法和其他一些方法类似,只是在恰当位置修改原来的列表。这意味着,它不是简单地返回一个修改过的新列表——而是直接修改原来的列表。
2. count
count 方法统计某个元素在列表中出现的次数:
>>> [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘].count(‘to‘) 2 >>> x = [[1,2], 1, 1, [2, 1, [1, 2]]] >>> x.count(1) 2 >>> x.count([1,2]) 13. extend
extend 方法可以在列表的末尾一次性追加另一个序列中的多个值。
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6]extend 方法修改了被扩展的列表,而原始的连接操作(+)则不然,它会返回一个全新的列表。
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>> >>> a + b [1, 2, 3, 4, 5, 6, 4, 5, 6] >>> a [1, 2, 3, 4, 5, 6]4. index
index 方法用于从列表中找出某个值第一个匹配项的索引位置:
>>> knights = [‘We‘, ‘are‘, ‘the‘, ‘knights‘, ‘who‘, ‘say‘, ‘ni‘] >>> knights.index(‘who‘) 4当搜索不存在的值时,就会引发一个异常。
5. insert
insert 方法用于将对象插入到列表中:
>>> numbers = [1, 2, 3, 5, 6, 7] >>> numbers.insert(3, ‘four‘) >>> numbers [1, 2, 3, ‘four‘, 5, 6, 7]6. pop
pop 方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:
>>> x = [1, 2, 3] >>> x.pop() 3 >>> x [1, 2] >>> x.pop(0) 1 >>> x [2]pop方法是唯一一个即能修改列表又返回元素值(除了None)的列表方法。
7. remove
remove 方法用于移除列表中某个值的第一个匹配项:
>>> x = [‘to‘, ‘be‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘] >>> x.remove(‘be‘) >>> x [‘to‘, ‘or‘, ‘not‘, ‘to‘, ‘be‘] >>> x.remove(‘bee‘) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list只有第一次出现的值被移除,而不存在与列表中的值是不会移除的。
remove 是一个没有返回值的原位置改变方法。它修改了列表却没有返回值。
8. reverse
reverse 方法将列表中的元素反向存放。
>>> x = [1, 2, 3] >>> x.reverse() >>> x [3, 2, 1]该方法改变了列表但不返回值。
9. sort
sort 方法用于在原位置对列表进行排序。
>>> x = [4, 6, 2, 1, 7, 9] >>> x.sort() >>> x [1, 2, 4, 6, 7, 9]sort 方法修改了 x 却返回了空值。
四、元组:不可变序列
创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组。
>>> 1, 2, 3 (1, 2, 3)元组也是(大部分时候是)通过圆括号括起来的:
>>> (1,2,3) (1, 2, 3)
实现包括一个值的元组有些奇特——必须加个逗号:
>>> 42, (42,) >>> (42,) (42,)
tuple函数的功能与list函数基本上是一样的:以一个序列作为参数并把它转化为元组。
>>> tuple([1, 2, 3]) (1, 2, 3)
除了创建元组和访问元组元组之外,也没有太多其他操作,可以参考其他类型的序列来实现。
元组的意义:元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。