>>> 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'])
列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
>>> vec = [2, 4, 6] >>> [3*x for x in vec] [6, 12, 18]
>>> [[x, x**2] for x in vec] [[2, 4], [4, 16], [6, 36]]
>>> freshfruit = [' banana', ' loganberry ', 'passion fruit '] >>> [weapon.strip() for weapon in freshfruit] ['banana', 'loganberry', 'passion fruit']
>>> [3*x for x in vec if x > 3] [12, 18] >>> [3*x for x in vec if x < 2] []
>>> vec1 = [2, 4, 6] >>> vec2 = [4, 3, -9] >>> [x*y for x in vec1 for y in vec2] [8, 6, -18, 16, 12, -36, 24, 18, -54] >>> [x+y for x in vec1 for y in vec2] [6, 5, -7, 8, 7, -5, 10, 9, -3] >>> [vec1[i]*vec2[i] for i inrange(len(vec1))] [8, 12, -54]
# 使用复杂表达式或嵌套函数 >>> [str(round(355/113, i)) for i inrange(1, 6)] ['3.1', '3.14', '3.142', '3.1416', '3.14159']
>>> # 以下演示了两个集合的操作 ... >>> a = set('abracadabra') >>> b = set('alacazam') >>> a # a 中唯一的字母 {'a', 'r', 'b', 'c', 'd'} >>> a - b # 在 a 中的字母,但不在 b 中 {'r', 'd', 'b'} >>> a | b # 在 a 或 b 中的字母 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # 在 a 和 b 中都有的字母 {'a', 'c'} >>> a ^ b # 在 a 或 b 中的字母,但不同时在 a 和 b 中 {'r', 'd', 'b', 'm', 'z', 'l'}
集合支持推导式:
1 2 3
>>> a = {x for x in'abracadabra'if x notin'abc'} >>> a {'r', 'd'}
字典
序列是以连续的整数为索引,字典以关键字为索引,关键字可以是任意不可变类型,通常用字符串或数值。
在同一个字典之内,关键字必须是互不相同。
一对大括号创建一个空的字典:{}。
这是一个字典运用的简单例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
>>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> list(tel.keys()) ['irv', 'guido', 'jack'] >>> sorted(tel.keys()) ['guido', 'irv', 'jack'] >>> 'guido'in tel True >>> 'jack'notin tel False
>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'} >>> for k, v in knights.items(): ... print(k, v) ... gallahad the pure robin the brave
在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到:
1 2 3 4 5 6
>>> for i, v inenumerate(['tic', 'tac', 'toe']): ... print(i, v) ... 0 tic 1 tac 2 toe
同时遍历两个或更多的序列,可以使用 zip() 组合:
1 2 3 4 5 6 7 8
>>> questions = ['name', 'quest', 'favorite color'] >>> answers = ['lancelot', 'the holy grail', 'blue'] >>> for q, a inzip(questions, answers): ... print('What is your {0}? It is {1}.'.format(q, a)) ... What is your name? It is lancelot. What is your quest? It is the holy grail. What is your favorite color? It is blue.
要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数:
1 2 3 4 5 6 7 8
>>> for i inreversed(range(1, 10, 2)): ... print(i) ... 9 7 5 3 1
要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值:
1 2 3 4 5 6 7 8
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for f insorted(set(basket)): ... print(f) ... apple banana orange pear