1 .关于列表方法

列表数据类型有更多的方法。下面是List对象的所有方法:

  • list.append(x)将一项添加到列表的末尾。等价于a[len(a):]=[x]
  • list.extend(iterable)通过追加可迭代中的所有项来扩展列表。等价于a[len(a):] = iterable
list = [2,5,3,7,6,9]
list.extend(range(2,8))
list
[2, 5, 3, 7, 6, 9, 2, 3, 4, 5, 6, 7]
list
[2, 5, 3, 7, 6, 9, 2, 3, 4, 5, 6, 7]
list[len(list):] = range(9,13)
list
[2, 5, 3, 7, 6, 9, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12]
  • list.insert(i, x)在给定位置插入项。第一个参数是要插入的元素的索引,所以a.insert(0,x)插入在列表的前面,a.insert(len(a),x)等价于a.append(x)
    append 和 insert的区别是 append将一项添加到列表末尾, 而 insert可以插到指定的位置
  • list.remove(x)从值等于x的列表中删除第一项。如果没有这样的项目,会触发错误。
  • list.pop([i])删除列表中给定位置的项,并返回它。如果没有指定索引,a.pop()将移除并返回列表中的最后一项。(方法签名中i周围的方括号表示参数是可选的,而不是在该位置键入方括号。您将经常在PythonLibrary引用中看到这种符号。)
    remove和pop之间的区别:remove需要一个参数,这个参数就是要删除的值,而pop需要一个参数,这个参数是指定的索引,若没有,pop会删除列表的最后一项
  • list.clear()从列表中删除所有项。相当于del a[:]
  • list.index(x[, start[, end]])在值等于x的第一个项的列表中返回基于零的索引。如果没有此类项,则引发ValueError
    可选参数startend被解释为片表示法,并用于将搜索限制在列表的特定子序列上。返回的索引是相对于完整序列的开头而不是开始参数计算的。
  • list.count(x)返回列表中x出现的次数。
  • list.sort(key=None, reverse=False)对列表中的项进行排序(参数可用于排序自定义,请参见sorted()以了解它们的说明)。
  • list.reverse()反转列表中的元素。
  • list.copy()返回列表的浅拷贝。相当于a[:]

使用大多数List方法的示例:

>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple')
2
>>> fruits.count('tangerine')
0
>>> fruits.index('banana')
3
>>> fruits.index('banana', 4)  # Find next banana starting a position 4
6
>>> fruits.reverse()
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape')
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
>>> fruits.pop()
'pear'

您可能已经注意到,只修改列表的插入、删除或排序等方法没有打印返回值-它们返回默认的None。[1]这是Python中所有可变数据结构的设计原则。

2. 使用列表作为栈

List方法非常容易地将列表用作栈,其中添加的最后一个元素是检索到的第一个元素(“后入先出”)。若要将项添加到堆栈顶部,请使用append()。若要从堆栈顶部检索项,请使用pop()而不使用显式索引

3 使用列表作为队列

还可以使用List作为队列,其中添加的第一个元素是检索到的第一个元素(“先入先出”);然而,列表对此并不有效。尽管列表末尾的添加和弹栈是快速的,但从列表开始执行插入或弹栈的速度很慢(因为所有其他元素都必须因为一个元素而移动)。
列表居然可以用作队列,可以使用popleft() 函数删除第一个值
若要实现队列,请使用具有快速从两端添加和弹栈的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
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])