列表在Python中的应用相当广泛,前面我们的示例也大量地使用了列表。
这里我们主要了解下列表不同于元组和字符串的地方---列表是可变的,即可修改其内容。
一、函数list
通过list(实际上是一个类)可以使用字符串来创建一个列表。
>>> list('Hello') ['H', 'e', 'l', 'l', 'o']
实际上,可将任何序列(而不仅仅是字符串)作为list的参数。
二、基本的列表操作
可对列表执行所有的标准序列操作,如索引、切片、拼接和相乘。
下面主要主要一些能修改列表的方式。
1、给元素赋值
使用索引表示法给特定位置的元素赋值:
>>> x = [1, 1, 1] >>> x[1] = 2 >>> x [1, 2, 1] >>>
不能给不存在的元素赋值:
>>> x[3] = 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list assignment index out of range
2、删除元素
使用del语句即可删除元素。
>>> x = [1, 2, 3] >>> del x[1] >>> x [1, 3]
不能删除不存在的元素:
>>> x = [1, 2, 3] >>> del x[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list assignment index out of range
3、给切片赋值
切片是一项及其强大的功能,而能够给切片赋值让这项功能显得更加强大。
>>> str = list('Python') >>> str ['P', 'y', 't', 'h', 'o', 'n'] >>> str[4:] = list('er') >>> str ['P', 'y', 't', 'h', 'e', 'r']
可将切片替换为长度与其不同的序列。
>>> str = list('Python') >>> str[1:] = list('rogram') >>> str ['P', 'r', 'o', 'g', 'r', 'a', 'm']
还可在不替换原有元素的情况下插入新元素。
>>> numbers = [1, 5] >>> numbers[1:1] = [2, 3, 4] >>> numbers [1, 2, 3, 4, 5]
numbers[1:1]相当于在索引为1的位置上进行了指定插入操作。
也可以通过类似的操作来删除切片。
>>> numbers [1, 2, 3, 4, 5] >>> numbers[1:4] = [] >>> numbers [1, 5]
上述代码与del numbers[1:4]等效,但后者的可读性更好一些。
三、列表方法
方法是与对象(列表、数、字符串等)联系紧密的函数。调用格式如下:
object.method(arguments)
1、append
方法append用于将一个对象附加到列表末尾。
>>> lst = [1, 2, 3] >>> lst.append(4) >>> lst [1, 2, 3, 4]
append不会返回修改后的新列表,而是直接修改旧列表。
2、clear
方法clear就地清空列表的内容。
>>> lst = [1, 2, 3] >>> lst.clear() >>> lst []
该功能类似于切片赋值语句 lst[:] = []。
3、copy
方法copy复制列表。
>>> a = [1, 2, 3] >>> b= a.copy() >>> b [1, 2, 3] >>> b[1] = 4 >>> b [1, 4, 3] >>> a [1, 2, 3]
该功能类似于使用a[:]或者list(a),它们也都复制a。
4、count
方法count计算指定的元素在列表中出现了多少次。
>>> ['aa', 'bb', 'cc', 'dd', 'aa'].count('aa') 2 >>> x = [[1, 2], 1, 1, [2, 1, [1, 2]]] >>> x.count(1) 2 >>> x.count([1, 2]) 1
5、extend
使用一个列表来扩展另一个列表。
>>> a = [1, 2, 3] >>> b = [4, 5, 6] >>> a.extend(b) >>> a [1, 2, 3, 4, 5, 6] >>> b [4, 5, 6]
6、index
方法index在列表中查找指定值第一次出现的索引。
>>> lst = ['aa', 'bb', 'cc', 'dd', 'aa'] >>> lst.index('aa') 0 >>> lst.index('bb') 1 >>> lst.index('ee') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: 'ee' is not in list
指定元素不存在时会发生异常。
7、insert
方法insert用于将一个对象插入列表。
>>> a = [1, 2, 3] >>> a.insert(1, 4) >>> a [1, 4, 2, 3]
8、pop
方法pop从列表中删除一个元素(默认为最后一个元素),并返回这一元素。
>>> x = [1, 2, 3] >>> x.pop() 3 >>> x [1, 2] >>> x.pop(0) 1 >>> x [2]
pop是唯一既能修改列表又返回一个非None值的列表方法。
Python没有提供push,但可使用append来替代。
9、remove
方法remove用于删除第一个为指定值的元素。
>>> lst = ['aa', 'bb', 'cc', 'dd', 'aa'] >>> lst.remove('aa') >>> lst ['bb', 'cc', 'dd', 'aa'] >>> lst.remove('ee') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list
指定元素不存在时会发生异常。
10、reverse
方法reverse按相反的顺序排列列表中元素。
>>> x = [1, 2, 3] >>> x.reverse() >>> x [3, 2, 1]
11、sort
方法sort用于对列表就地排序,不会返回排序后的列表的副本。
>>> x = [4, 5, 1, 6, 2, 3] >>> x.sort() >>> x [1, 2, 3, 4, 5, 6]
12、高级排序
方法sort接受两个可选参数:key和reverse。
参数key是一个用于排序的函数,通过使用它来为每个元素创建一个键,再根据这些键对元素进行排序。
例如,要根据长度对元素进行排序,可将参数key设置为函数len:
>>> x = ['abcde', 'ab', 'abcd', 'abc'] >>> x.sort(key=len) >>> x ['ab', 'abc', 'abcd', 'abcde']
参数reverse指出是否要按相反的顺序对列表进行排序。
>>> x = [4, 5, 1, 6, 2, 3] >>> x.sort(reverse=True) >>> x [6, 5, 4, 3, 2, 1]