一,Python 的列表数据类型包含更多的方法。 这里是所有的列表对象方法: list.append(x)
把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] 。
list.extend(L)
将一个给定列表中的所有元素都添加到另一个列表中,相当于 a[len(a):] =
L。
list.insert(i, x) 在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引, 例如 a.insert(0, x) 会插入到整个链表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x)
删除链表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop([i ])
从链表的指定位置删除元素,并将其返回。如果没有指定索引, a.pop() 返回
最后一个元素。元素随即从链表中被删除。(方法中 i 两边的方括号表示这个参
数是可选的,而不是要求你输入一对方括号,你会经常在Python 库参考手册中遇
到这样的标记。)
list.index(x)
返回链表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错
误。
list.count(x)
返回 x 在链表中出现的次数。
list.sort() 对链表中的元素就地进行排序。
list.reverse() 就地倒排链表中的元素。
二,链表方法使得链表可以很方便的做为一个堆栈来使用,堆栈作为特定的数据结构,最 先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加 到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:
[3, 4, 5, 6, 7]
>>> stack.pop() 7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
三,
5.1.2 把链表当作队列使用
你也可以把链表当做队列使用,队列作为特定的数据结构,最先进入的元素最先释放 (先进先出)。不过,列表这样用效率不高。相对来说从列表末尾添加和弹出很快; 在头部插入和弹出很慢(因为,为了一个元素,要移动整个列表中的所有元素)。
要实现队列,使用 collections.deque ,它为在首尾两端快速插入和删除而设计。 例如:
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")
>>> queue.append("Graham")
>>> queue.popleft()
’Eric’
# Terry arrives
# Graham arrives
# The first to arrive now leaves
>>> queue.popleft()
’John’
四,列表推导式
列表推导式为从序列中创建列表提供了一个简单的方法。 普通的应用程式通过将一些 操作应用于序列的每个成员并通过返回的元素创建列表,或者通过满足特定条件的元 素创建子序列。
例如, 假设我们创建一个 squares 列表, 可以像下面方式:
我们同样能够达到目的采用下面的方式: = **for in ()]
这也相当于 squares = map(lambda x: x**2, range(10)), 但是上面的方式 显得简洁以及具有可读性。
列表推导式由包含一个表达式的括号组成,表达式后面跟随一个 for 子句,之后可以 有零或多个 for 或 if 子句。 结果是一个列表,由表达式依据其后面的 for 和 if 子 句上下文计算而来的结果构成。
例如,如下的列表推导式结合两个列表的元素,如果元素之间不相等的话:
等同于:
>>> for x in [1,2,3]:
for y in [3,1,4]: if x != y:
...
...
...
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]