While循环
一般格式:
while <test>
<statement1>
else:
<statement2>
break、continue、pass和循环else
break:跳出最近所在的循环(跳过整个循环语句)。
continue:跳到最近所在循环的开头处(来到循环的首行)。
pass:什么事也不做,只是空占位语句。
循环else块:只有当循环正常离开时才会执行(也就是没有碰到break语句)
一般循环格式
while <test1>:
<statement1>
if <test2>: break
if <test3>: continue
else:
<statement2>
pass语句是无运算的占位语句。
用途:忽略try语句所捕获的异常,以及定义带属性的空类对象,而该类实现的对象行为就像其他语言的结构和记录。pass有时指的是以后会填上,只是暂时用于填充函数主体而已。
在Python3.0中还可以使用...来省略代码。
关于循环else分句的更多内容
在这里,我们对标志位进行初始化、设置以及稍后再进行测试,从而确认搜索是否成功,这是有效的Python程序,也的确可以运行。然而这正是循环else分句所要处理的结构种类。以下是else的等效版本。
for循环
for循环在Python中是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、其他内置可迭代对象以及之后我们能够通过类所创建的新对象。
一般格式
for <target> in <object>
<statements>
else:
<statements>
完整格式
for <target> in <object>
<statements>
if <test>: break
if <test>: continue
else:
<statements>
基本应用
for循环中的元组、字典和列表赋值
Python3.0在for循环中扩展的序列赋值
可以使用Python3.0的扩展序列解包赋值语法,来提取序列中的序列的元素和部分。
嵌套for循环
编写循环的技巧
如果你在列表中需要每隔一个元素或每隔两个元素访问,或者在过程中修改列表,或者在同一个for循环内,并行遍历一个以上的序列,该如何操作?
Python提供了两个内置函数,在for循环内定制迭代:
(1).内置range函数返回一系列连续增加的整数,可作为for中的索引。
(2).内置zip函数返回并行元素的元组的列表,可用于在for中内遍历数个序列。
循环计数器:while和range
range是一个迭代器,会根据需要产生元素:一个参数时,range会产生从零算起的整数列表,但其中不包括该参数的值。如果传进两个参数,第一个将视为下边界。第三个选用参数可以提供步进值。
非完备遍历:range和分片
除非你有特殊的索引要求,不然在可能的情况下,最好使用Python中的简单的for循环,不要用while,并且不要在for循环中使用range调用,只将其视为最后的手段。更简单的办法总是更好的。
但是,如之前我们所碰到的问题点:当我们需要每隔一个元素或每隔两个元素访问时,这个时候我们可以采用range和分片进行操作,如下所示:
修改列表:range
上述修改并没有改变L的值,因为修改的是循环变量x,而不是列表L。要真的在我们遍历列表时对其进行修改,我们需要使用索引,让我们可以在遍历时替每个位置赋一个已更新的值。range/len组合可以替我们产生所需要的索引。
并行遍历:zip和map
内置的zip函数让我们使用for循环来并行使用多个序列。在基本运算中,zip会取得一个或多个序列为参数,然后返回元组的列表,将这些序列中的并排的元素配成对。
和range一样,zip在Python3.0中也是一个可迭代的对象。
搭配for循环,它会支持并行迭代
当参数长度不同时,zip会以最短序列的长度为准来截断所得到的元组。
在Python2.6中的map的等价形式
内置map函数,用类似方式把序列的元素配对起来,但是如果参数长度不同,则会为较短的序列用None补齐(而不是按最短的长度截断)
使用zip构造字典
产生偏移和元素
range来产生字符串中元素处的偏移值,而不是那些偏移值处的元素。不过,有时我们需要既返回偏移量又返回偏移量所在的元素,这个时候我们可以使用enumerate