列表(list)是Python以及其他语言中最常用到的数据结构之一。Python使用使用中括号 [ ] 来解析列表。列表是可变的(mutable)——可以改变列表的内容。
二、基本的列表操作
列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法。本文介绍一些可以改变列表的方法。
1. list 函数
通过 list(seq) 函数把一个序列类型转换成一个列表。
- >>> list('hello')
- ['h', 'e', 'l', 'l', 'o']
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']
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]
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])
- 1
extend 方法可以在列表的末尾一次性追加另一个序列中的多个值。
- >>> a = [1, 2, 3]
- >>> b = [4, 5, 6]
- >>> a.extend(b)
- >>> a
- [1, 2, 3, 4, 5, 6]
- >>> 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]
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]
pop 方法会移除列表中的一个元素(默认是最后一个),并且返回该元素的值:
- >>> x = [1, 2, 3]
- >>> x.pop()
- 3
- >>> x
- [1, 2]
- >>> x.pop(0)
- 1
- >>> x
- [2]
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]
四、元组:不可变序列
创建元组的语法很简单:如果你用逗号分隔了一些值,那么你就自动创建了元组。
- >>> 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)
除了创建元组和访问元组元组之外,也没有太多其他操作,可以参考其他类型的序列来实现。
元组的意义:元组可以在映射(和集合的成员)中当作键使用——而列表则不行;元组作为很多内建函数和方法的返回值存在。