while循环
while语句是python语言中最通用的迭代结构。简而言之,只要头部的测试一直计算为真值,那么他就会重复执行一个语句块。它被称为“循环”是因为控制权会持续返回到语句的开头部分,直至测试为假。
一般形式
while语句最完整的形式是:首行以及测试表达式有一行或多行正常缩进语句构成的主体以及可选的else部分:
while test1:
statements
else:
statements
break、continue、pass和循环的else
在python中:
- break
跳出最近所在的外围循环(跳过整个循环语句); - continue
跳到最近所在外围循环的头部(来到循环的头部行); - pass
什么事也不做事,只是一条空占位语句; - 循环else块
当且仅当循环正常离开时才会执行(也就是没有碰到break语句);
一般循环形式
while test:
statemrnts
if test: break
if test: continue
else:
statements
pass
pass语句是无运算的占位语句,当语法要求有一条语句却没有任何实际的语句可写时,就可以使用它。它通常用于为复合语句编写一个空的主体。
while True: pass
如果函数体为空就会得到语法错误,因此可以暂时使用pass填充函数的主体:
def fun1():
pass
def fun2():
pass
contiune
continue语句会立即跳到循环的顶端。此外,它偶然也帮你避免语句嵌套。
x = 10
while x:
x = x - 1
if x % 2 != 0: continue
print(x, end='')
break
break语句会导致立刻从一个循环退出。因为在碰到break时,位于break后的循环体代码都不会被执行,所以有时可以引入break来避免嵌套化。
循环的else
当循环的else分句组合使用时,break语句通常可以代替其他编程语言中提示循环是否正常结束状态的标志位。
for循环
for循环在python中是一个通用的序列迭代器:它可以遍历任何有序序列或其他可迭代对象内的元素。for语句可用于字符串、列表、元组或其他内置可迭代对象,以及后来我们通过类所创建的用户定义的新对象。
一般形式
for target in object:
statements
else:
statements
当python运行for循环时,会逐个将可迭代对象object中的元素赋值给名称target,然后为每一个元素执行循环主体。循环主体一般使用被赋值的目标引用序列中当前的元素,九好像它时遍历序列的游标。
for循环的完整形式如下:
for target in object:
statements
if test: break
if test: continue
else:
statements
示例
基础应用
for i in ['spam', 'eggs', 'ham']:
print(i, end='')
其他数据类型
>>> S = 'lumberjack'
>>> T = ('and', "i'm", 'okay')
>>> for i in S: print(i, end=' ')
...
l u m b e r j a c k >>>
>>> for i in T: print(i, end=' ')
...
and i'm okay >>>
for循环中的元组赋值
>>> T = [(1, 2), (3, 4), (5, 6)]
>>> for (a, b) in T:
... print(a, b)
...
1 2
3 4
5 6
最终效果就是在每次循环中,都会自动解包赋值当前元组。
编写for循环的技巧
for循环包含了常见的计数器式循环。由于通常for循环比while循环更容易写,也执行的更快,所以for循环一般是你遍历序列或其他可迭代对象时的首选。
python提供了一套内置函数,可以帮助我们在for循环内定制迭代:
- 内置函数range返回一系列连续增加的整数,可作为for中的索引;
- 内置函数zip返回一系列并行元素的元组,可用于在for中内遍历多个序列;
- 内置函数enumerate同时生成可迭代对象中元素的值和索引,因而我们必须再手动计数;
- 内置函数map在python3中已经被移除;
计数器循环:range
range是一个会按需产生元素的可迭代对象,因此我们需要将range放在list、调用中,才能一次性显示它们所有内容:
>>> L = range(0, 10)
>>> L
range(0, 10)
>>>
>>> list(L)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range函数提供一种指定具体循环重复次数的简单方式。如我们需要执行3次,可以使用下列代码实现:
>>> for i in range(3):
... print(i, 'python')
...
0 python
1 python
2 python
for循环和while循环选择
作为一个准则,尽可能使用for而不是是while,并且不要在for循环中使用range调用,除非迫不得已;
并行遍历:zip
python内置的zip函数允许我们使用for循环并行访问多个序列——在同一个循环内且时间上不重叠。
>>> L1 = [1, 2, 3, 4]
>>> L2 = [5, 6, 7, 8]
>>>
>>> zip(L1, L2)
<zip object at 0x10ce7fc30>
>>>
>>> list(zip(L1, L2))
[(1, 5), (2, 6), (3, 7), (4, 8)]
在for循环中使用:
>>> for (x, y) in zip(L1, L2):
... print(x, y)
...
1 5
2 6
3 7
4 8
使用zip构造字典
>>>
>>> keys = ['spam', 'eggs', 'toast']
>>> values = [1, 3, 5]
>>> D2 = {}
>>> for (k, v) in zip(keys, values):
... D2[k] = v
...
>>> D2
{'spam': 1, 'eggs': 3, 'toast': 5}
同时给出偏移量和元素:enumerate
>>> L1 = [1, 2, 3, 4]
>>> for (i, v) in enumerate(L1):
... print(i, v)
...
0 1
1 2
2 3
3 4