列表:Python的"苦力"

列表可以使用所有适用于序列的标准操作,例如索引、分片、连接和乘法。有趣的是,列表是可以修改的,而元组却不行。下面来简单介绍下基本的列表操作和列表方法。

列表操作
1. 元素赋值

改变列表是很容易的,使用索引标记来为某个特定的、位置明确的元素赋值。

>>> exp = [1, 1, 1]
>>> exp[1] = 6
>>> exp
[1, 6, 1]

需要注意的是:不能为一个位置不存在的元素进行赋值。比如说列表的长度为1或者为空,那么你就不能为索引为3的元素进行赋值,而是要先初始化一个长度大于等于4的空列表。

>>> exp = []
>>> exp[3] = 666
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> exp = [None] * 4
>>> exp[3] = 666
[None, None, None, 666]
2. 删除元素

从列表中删除元素也很容易,使用del语句来实现。

>>> names = ['Alice', 'Beth', 'Cecil', 'Dee-Dee']
>>> del names[2]
>>> names
['Alice', 'Beth', 'Dee-Dee']
3. 分片赋值

使用分片赋值时,可以使用与原序列不等长的序列将分片替换

>>> test = list('Perl')
>>> test
['P', 'e', 'r', 'l']
>>> test[1:] = list('ython')
>>> test
['P', 'y', 't', 'h', 'o', 'n']

分片赋值语句可以在不需要替换任何原有元素的情况下插入新的元素。

>>> numbers = [1, 5]
>>> numbers[1:1] = [2, 3, 4]
>>> numbers
[1, 2, 3, 4, 5]
列表方法
1. append

append方法用于在列表末尾追加新的对象

>>> lst = [1, 3, 5]
>>> lst.append(7)
>>> lst
[1, 3, 5, 7]

注意append方法不是返回一个修改过的列表,而是直接修改原来的列表。

2. count

count方法统计某个元素在列表中出现的次数

>>> ['to', 'be', 'or', 'not', 'to', 'be'].count('be')
2
3. 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 + b
[1, 2, 3, 4, 5, 6]
>>> a
[1, 2, 3]

你可以看到被连接的列表与之前例子中被扩展的列表是一样的,但是这一次原列表并没有被修改。因为原始的连接操作创建了一个包含a和b副本的新列表。
我们可以使用分片赋值来实现相同的结果:

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a[len(a):] = b
>>> a
[1, 2, 3, 4, 5, 6]
4. index

index方法用于从列表中找出某个值第一个匹配项的索引位置。

>>> knights = ['we', 'are', 'the', 'knights', 'who', 'say', 'ni']
>>> knights.index('who')
4
>>> knights.index('herring')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: 'herring' is not in list
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 = [2, 3, 4]
>>> x.pop()
4
>>> x.pop(0)
2
>>> x
[3]
>>> x.pop()
3
>>> x
[]
>>> x.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop from empty list

注意,pop方法是唯一一个既能修改列表又返回元素值(除了None)的列表方法。
Python实现栈操作可以使用pop和append,实现队列操作可以使用insert(0, …)和pop或者pop(0)和append。
当然,更好的解决方案是使用collection模块中的deque对象。

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 = [2, 3, 4, 5]
>>> x.reverse()
>>> x
[5, 4, 3, 2]

reverse方法改变了列表但不返回值。
如果需要对一个序列进行反向迭代,那么可以使用reversed函数。该函数并不返回一个列表,而是返回一个迭代器对象。

>>> x = [1, 2, 3]
>>> for i in reversed(x):
...     print i
... 
3
2
1
9. sort

sort方法用于在原位置对列表进行排序。

>>> x = [4, 2, 5, 1, 9, 7]
>>> x.sort()
>>> x
[1, 2, 4, 5, 7, 9]

如果需要一个排好序的列表副本,同时又需要保留原有列表不变的时候。那么可以这样做:

>>> x = [4, 2, 5, 1, 9, 7]
>>> y = x[:]
>>> y.sort()
>>> x
[4, 2, 5, 1, 9, 7]
>>> y
[1, 2, 4, 5, 7, 9]

另一种获取已排序的列表副本的方法是,使用sorted函数。

>>> x = [4, 2, 5, 1, 9, 7]
>>> y = sorted(x)
>>> x
[4, 2, 5, 1, 9, 7]
>>> y
[1, 2, 4, 5, 7, 9]

猜你喜欢

转载自blog.csdn.net/Jonms/article/details/79805253
今日推荐