【Python学习】python学习手册--第十三章 while和for循环

while循环

while循环是检测某一个条件,如果条件为真就执行while命令内的代码块。

一般格式

最完整的格式是:首行以及测试表达式有一列或者多列拥有相同代码缩进的主体,以及一个可选的else部分

while <test>:
    <statements1>
else:                       #else部分是循环语句在没有break语句执行的情况下,离开循环时执行
    <statements2>

Python并没有其他语句中所谓的do….until循环语句。需要达到这种效果,可以借助break语句。

break,continue,pass和循环else

语句说明备注
break跳出最近所在的循环跳过整个循环语句
continue直接进行循环语句的下次迭代跳到循环语句的开头处,继续执行循环
pass什么也不做空语句的占位符
循环else当循环正常结束,执行else代码块正常结束即没有执行到break语句没有执行循环主体语句时,也会执行else部分

pass语句通常用于为复合语句或函数编写一个空的主体,复合语句或函数在编程后面才实现时,为了程序不产生语法或其它错误,就用pass来跳过改语句或函数的执行,如下:

def fun():
   pass
while <test>:
   pass

for循环

for循环是Python中很常用的一个循环,是一个通用的序列迭代器:可以用于迭代任何有序的序列对象内的元素。

一般格式

for <target> in <object>:  #每一次迭代<target>就像游标一样,取出object中的一个元素,进入循环主体进行处理。
    <statements1>
else:
    <statements2>              #这里的else模块与while的else模块执行规则一致,没有碰到break语句时执行。

循环编写技巧

for循环包括多数计数器式的循环。一般而言,for比while容易写,执行速度也比较快。在某些情况下,你需要某种特定的方式来进行迭代,就可以使用python提供的内置函数:

  • 内置函数range返回一些列连续增加的整数,可作为for中的索引。
  • 内置zip函数返回并行元素的元组的组成,可用作for中内遍历数个序列。
>>> range(6)
range(0, 6)
>>> list(range(6))
[0, 1, 2, 3, 4, 5]
>>> list(range(2,5))            #第一个与第二个元素,提供产生范围的上下边界
[2, 3, 4]
>>> list(range(2,5,2))
[2, 4]
>>> list(range(2,10,2))          #第三个参数提供步长
[2, 4, 6, 8]
>>> 

并行遍历:zip和map

内置函数range允许我们在for循环中以非完备的方式遍历序列。内置的zip函数也让我们使用for循环来并行使用多个序列。

>>> l1=[1,2,3,4,5]
>>> l2=[6,7,8,9,0]
>>> zip(l1,l2)
<zip object at 0x7f8f149fe7c8>
>>> list(zip(l1,l2))
[(1, 6), (2, 7), (3, 8), (4, 9), (5, 0)]
>>> l2=[6,7,8,9]                           #注意到当l2列表少一个元素时,zip会将长的列表“裁剪”与短列表一致
>>> list(zip(l1,l2))
[(1, 6), (2, 7), (3, 8), (4, 9)]
>>> for (a,b) in zip(l1,l2):               #zip函数的返回对象,可以直接用于循环迭代。
...     print(a,b)
... 
1 6
2 7
3 8
4 9
>>> 

map会带一个函数和一个序列,将序列中的每一个元素都应用于这个函数,并将函数结果返回。

>>> map(int,'123456')
<map object at 0x7f8f1730f588>
>>> list(map(int,'123456'))
[1, 2, 3, 4, 5, 6]
>>> 

用zip函数可以巧妙的构造字典:

>>> l1
[1, 2, 3, 4, 5]
>>> l2
[6, 7, 8, 9]
>>> for (x,y) in zip(l1,l2): D[x]=y            #用键值方式构建字典时,必须先声明一个空字典
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'D' is not defined
>>> D={}
>>> for (x,y) in zip(l1,l2): D[x]=y
... 
>>> D
{1: 6, 2: 7, 3: 8, 4: 9}
>>> D2=dict(zip(l1,l2))              #这是一种更简单的方法,对dict调用时,实际上得到的是类似列表到字典的转换
>>> D2
{1: 6, 2: 7, 3: 8, 4: 9}
>>> 

产生偏移和元素:enumerate
有些循环,我们需要得到该次迭代在循环体中的偏移量。

>>> for (x,y) in enumerate("abcdefg"):    #enumerate返回一个生成器对象,这种对象支持迭代协议
...   print("index:",x,"    ",y)          #简而言之,这个对象会有一个__next__方法,由一个内置函数调用它
... 
index: 0      a
index: 1      b
index: 2      c
index: 3      d
index: 4      e
index: 5      f
index: 6      g
>>> 

小结

在Python中,循环是很常见的复合语句,本章讨论了循环语句,以及循环语句的使用函数与使用技巧。while语句是一个通用的循环语句,for循环设计用来在一个序列中遍历各个元素(序列需要是真正可迭代的)。zip函数用来循环并行两个列表。range函数用来生成连续值的,可以用在for语句中进行循环控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值