chapter_10
while和for循环
while 循环
while <test>:
<statement1>
else:
#当控制权离开循环而又没有碰到break语句时会执行
<statement2>
break,continue,pass和循环else
break | 跳出最近所在的循环(跳过整个循环语句) |
---|---|
continue | 跳过最近所在循环的开头处(来到循环的首行) |
pass | 什么事也不做,只是空占位语句 |
循环else块 | 只有当循环正常结束时才会执行(也就是没有碰到break语句) |
for 循环
- 一般格式:
for <target> in <object>:
<statements>
else:
#当控制权离开循环而又没有碰到break语句时会执行,和while循环一样
<statements>
循环计数器
>>> list(range(5)),list(range(2,5)),list(range(0,10,2))
([0, 1, 2, 3, 4], [2, 3, 4], [0, 2, 4, 6, 8])
>>> list(range(-5,5))
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> list(range(5,-5,-1))
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4]
>>> for i in range(3):
... print(i,'Pythons')
...
0 Pythons
1 Pythons
2 Pythons
产生偏移值和元素的遍历
- 传统做法
>>> S = 'spam'
>>> offset = 0
>>> for item in S:
... print(item,'appears at offset',offset)
... offset +=1
...
s appears at offset 0
p appears at offset 1
a appears at offset 2
m appears at offset 3
- enumerate 函数实现
>>> S = 'spam'
>>> offset = 0
>>> for item in S:
... print(item,'appears at offset',offset)
... offset +=1
...
s appears at offset 0
p appears at offset 1
a appears at offset 2
m appears at offset 3
- enumerate 函数返回一个生成器对象: 这种对象支持迭代协议.
>>> S
'spam'
>>> E = enumerate(S)
>>> E
<enumerate object at 0xb749d70c>
>>> next(E)
(0, 's')
>>> next(E)
(1, 'p')
>>> next(E)
(2, 'a')
>>> next(E)
(3, 'm')
>>> next(E)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
并行遍历: zip和map
- 内置zip函数能够让我们使用for循环来并行使用多个序列
>>> L1 = [1,2,3,4]
>>> L2 = [5,6,7,8]
>>> zip(L1,L2)
<zip object at 0xb735c8cc>
>>> list(zip(L1,L2))
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> L1 = [1,2,3,4]
>>> L2 = [5,6,7,8]
>>> for (x,y) in zip(L1,L2):
... print(x, y, '--', x+y)
...
1 5 -- 6
2 6 -- 8
3 7 -- 10
4 8 -- 12
- 当参数长度不同时,zip会以最短序列的长度为标准来截断所得的序列
>>> S1 = 'abc'
>>> S2 = 'xyz123'
>>> list(zip(S1,S2))
[('a', 'x'), ('b', 'y'), ('c', 'z')]
- Python 2.6 中的map的等价形式
在python 2.x中,相关(较旧)的内置map函数,用类似方式把序列的元素配对起来,但是如果参数长度不同,则会为较短的序列用None补齐,而不是用最短的长度截断
#Python 2.x中的代码,Python 3.0支持该函数,但用法不是这样
>>> S1 = 'abc'
>>> S2 = 'xyz123'
>>> map(None,S1,S2)
[('a', 'x'), ('b', 'y'), ('c', 'z'), (None, '1'), (None, '2'), (None, '3')]
- Python 3.0 中的map函数
- map 是一个值生成器,第一个参数为函数名,第二个参数将作为第一个参数表示的函数的参数来执行.
>>> list(map(ord,'spam'))
[115, 112, 97, 109]
- 等效于
>>> res = []
>>> for c in 'spam': res.append(ord(c))
...
>>> res
[115, 112, 97, 109]