目录
5.1. More on Lists¶
列表数据类型还有一些更多的方法。以下是列表对象的所有方法:
list.append(x)
将项目添加到列表末尾。相当于 a[len(a):] = [x]。
list.extend(iterable)
通过附加可迭代对象中的所有项目来扩展列表。相当于 a[len(a):] = iterable。
list.insert(i, x)
在给定位置插入项目。第一个参数是要在其之前插入的元素的索引,因此 a.insert(0, x) 在列表的前面插入,并且 a.insert(len(a), x) 相当于 a.append( X)。
list.remove(x)
从列表中删除第一个值等于 x 的项目。如果没有这样的项目,它会引发 ValueError。
list.pop([i])
删除列表中给定位置的项目并将其返回。如果未指定索引,a.pop() 将删除并返回列表中的最后一项。如果列表为空或索引超出列表范围,则会引发 IndexError。
list.clear()
从列表中删除所有项目。相当于 del a[:]。
list.index(x[, start[, end]])
返回列表中第一个值等于 x 的项目的从零开始的索引。如果不存在这样的项目,则引发 ValueError。
可选参数 start 和 end 被解释为切片符号,并用于将搜索限制为列表的特定子序列。返回的索引是相对于完整序列的开头而不是起始参数计算的。
list.count(x)
返回 x 在列表中出现的次数。
list.sort(*, key=None, reverse=False)
对列表中的项目进行排序(参数可用于自定义排序,请参阅sorted() 了解其说明)。
list.reverse()
将列表中的元素反转到位。
list.copy()
返回列表的浅表副本。相当于a[:]。
- 使用大部分列表方法的示例:
fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
fruits.count('apple')
fruits.count('tangerine')
fruits.index('banana')
fruits.index('banana', 4) # Find next banana starting at position 4
fruits.reverse()
fruits
fruits.append('grape')
fruits
fruits.sort()
fruits
fruits.pop()
您可能已经注意到,仅修改列表的插入、删除或排序等方法没有打印返回值——它们返回默认的 None。 这是Python中所有可变数据结构的设计原则。
您可能会注意到的另一件事是,并非所有数据都可以排序或比较。例如,[None, 'hello', 10]
不会排序,因为整数无法与字符串进行比较,而 None
无法与其他类型进行比较。此外,有些类型没有定义的排序关系。例如,3+4j < 5+7j
不是有效的比较。
1.1. Using Lists as Stacks
列表方法使将列表用作堆栈变得非常容易,其中最后添加的元素是检索到的第一个元素(“后进先出”)。要将项目添加到堆栈顶部,请使用append()。要从堆栈顶部检索项目,请使用 pop() 而不使用显式索引。例如:
stack = [3, 4, 5]
stack.append(6)
stack.append(7)
stack
stack.pop()
stack
stack.pop()
stack.pop()
stack
1.2. Using Lists as Queues¶
也可以将列表用作队列,其中添加的第一个元素是检索到的第一个元素(“先进先出”);然而,列表对于此目的效率不高。虽然从列表末尾追加和弹出的速度很快,但从列表开头插入或弹出的速度很慢(因为所有其他元素都必须移动一位)。
要实现队列,请使用 collections.deque
,它的设计目的是从两端快速追加和弹出。例如:
from collections import deque
queue = deque(["Eric", "John", "Michael"])
queue.append("Terry") # Terry arrives
queue.append("Graham") # Graham arrives
queue.popleft() # The first to arrive now leaves
queue.popleft() # The second to arrive now leaves
queue # Remaining queue in order of arrival
1.3. List Comprehensions¶
列表推导式提供了一种创建列表的简洁方法。常见的应用是创建新列表,其中每个元素都是应用于另一个序列或可迭代的每个成员的某些操作的结果,或者创建满足特定条件的这些元素的子序列。
例如,假设我们要创建一个正方形列表,例如:
squares = []
for x in range(10):
squares.append(x**2)
squares
请注意,这将创建(或覆盖)一个名为 x 的变量,该变量在循环完成后仍然存在。我们可以使用以下方法计算没有任何副作用的正方形列表:
squares = list(map(lambda x: x**2, range(10)))
或者
squares = [x**2 for x in range(10)]
这更加简洁和可读。
列表推导式由包含表达式的括号组成,后跟 f o r for for 子句,然后是零个或多个 f o r for for 或 i f if if 子句。结果将是一个新列表,该列表是在其后面的