>>>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 之后跟一个表达式,然后有零到多个 for OR if 子句,返回结果是一个根据表达从其后的 for AND if 上下文环境中生成出来的列表
# 列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层>>>[x*y for x inrange(1,5)if x >2for y inrange(1,4)if y <3]>>>for x inrange(1,5)...if x >2...for y inrange(1,4)...if y <3... x * y
[3,6,4,8]
# 该实例演示数值相乘>>> 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']
# 该实例演示用 if 子句作为过滤器>>> vec =[2,4,6]>>>>[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']
四、嵌套列表解析
# 该实例演示 3X4 的矩阵列表转换为 4X3 列表>>> matrix =[...[1,2,3,4],...[5,6,7,8],...[9,10,11,12]]>>>[[row[i]for row in matrix]for i inrange(4)][[1,5,9],[2,6,10],[3,7,11],[4,8,12]]>>> transposed =[]>>>for i inrange(4):... transposed.append([row[i]for row in matrix])...>>> transposed
[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]>>> transposed =[]>>>for i inrange(4):...# the following 3 lines implement the nested listcomp... transposed_row =[]...for row in matrix:... transposed_row.append(row[i])... transposed.append(transposed_row)...>>> transposed
[[1,5,9],[2,6,10],[3,7,11],[4,8,12]]
五、元组和序列
元组由若干逗号分隔的值组成,在输出时总是有括号的,以便于正确表达嵌套结构
在输入时 可能有或没有括号 , 不过括号通常是必须的(如果元组是更大的表达式的一部分)
# 简单演示>>> t =12345,54321,'hello!'>>> t[0]12345>>> t
(12345,54321,'hello!')>>># Tuples may be nested:... u = t,(1,2,3,4,5)>>> u
((12345,54321,'hello!'),(1,2,3,4,5))
六、集合
一个 无序不重复元素 的集,可以用大括号 {} 创建集合,基本功能包括 关系测试和消除重复元素
如果要创建一个 空集合 ,你必须用 set() 而不是 {} ,后者创建一个 空的字典
# 简单演示>>> basket ={'apple','orange','apple','pear','orange','banana'}>>>print(basket)# 删除重复的{'orange','banana','pear','apple'}>>>'orange'in basket # 检测成员True>>>'crabgrass'in basket
False# 该实例演示两个集合的运算操作>>> 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'}# 该实例演示集合推导式>>> a ={x for x in'abracadabra'if x notin'abc'}>>> a
{'r','d'}
# 简单演示>>> 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# 该实例演示直接从键值对列表元组中构建字典>>>dict([('sape',4139),('guido',4127),('jack',4098)]){'sape':4139,'jack':4098,'guido':4127}# 该实例演示字典推导式>>>{x: x**2for x in(2,4,6)}{2:4,4:16,6:36}# 该实例演示使用关键字参数指定键值对>>>dict(sape=4139, guido=4127, jack=4098){'sape':4139,'jack':4098,'guido':4127}
八、遍历技巧
# 在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来>>> knights ={'gallahad':'the pure','robin':'the brave'}>>>for k, v in knights.items():...print(k, v)...
gallahad the pure
robin the brave
# 在序列中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到>>>for i, v inenumerate(['tic','tac','toe']):...print(i, v)...0 tic
1 tac
2 toe
# 同时遍历两个或更多的序列,可以使用 zip() 函数组合>>> 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() 函数进行反向>>>for i inreversed(range(1,10,2)):...print(i)...97531# 要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值>>> basket =['apple','orange','apple','pear','orange','banana']>>>for f insorted(set(basket)):...print(f)...
apple
banana
orange
pear