while循环
while ...:
...
else:
...
while后的表达式不允许有赋值语句(Python中的表达式都如此)。
当while的循环运行完(无中断)会进入else语句。
没有do until语句。
可以用pass或…代替空白代码(三个点还可以用来初始化)。
break和continue可以用来中断和跳到下次循环。
for循环
for ... in ...:
...
else:
...
else、break、continue作用同上。
for后面的变量会自动解包,哪怕是嵌套的序列结构(有点和序列赋值的解包类似):
for ((a,b),c) in [([1,2],3), ['xy',6]]:print(a,b,c)
#1 2 3
#x y 6
for a,*b, c in [(1,2,3,4), (2,3,4,5)]:print(a,b,c)
# 1,[2,3],4
# 2,[3,4],5
通常情况下,while()会比for()慢(因为需要更多输入)。
range
range()返回一系列连续增加的整数(左闭右开),可用于在for中内遍历数个序列。
产生对象可迭代,不可直接显示。
步进为x的遍历方法:
# 方法一:使用带步长的range方法:
for i in range(0, len(L), x):...
# 方法二:使用分片:
for i in L[::x]:...
只支持迭代、索引和len函数:
R = range(1,6)
len(R) #len函数
R[3]#正索引
R[-1] # 负索引
# 迭代:
I = iter(R)
next(I)
zip
zip()返回并行元素的元组对,可用于在for中内遍历数个序列。
只要可迭代就可以用zip,产生对象可迭代。
可以多个序列,配对到最短的序列的最后一个。
zip(L1,L2)#将两个序列元素配对
for (x,y) in zip(L1,L2):...
便于生成字典:
dict(zip(keys,vals))
enumerate
在迭代中,有时既需要迭代值,又需要知道是对应的第几次迭代,可以用此函数实现。
返回一个生成器对象(可迭代的)。
for (index, item) in enumerate(L):...
[c*i for (i,c) in enumerate(L)]
与next()配合:
S = 'spam'
E = enumerate(S) #E是一个enumerate对象
next(E) # 返回index,item对,(0,'s')
next(E) # (1,'p')
...