【.com快译】在Python中创建循环时,何使环通常有两个选择:while循环和for循环。何使环while很简单:它只是何使环重复,直到给定的何使环条件不再成立。for循环比较复杂,何使环因而功能更强大:for循环语句集合中遍历,何使环而不必知道集合的何使环详细信息。
Python for 循环组件
Python for循环有两个组件:
• 包含或产生要循环的何使环元素的容器、序列或生成器。何使环一般来说,何使环任何支持 Python迭代器协议的何使环对象都可以在for循环中使用。
• 保存容器/序列/生成器中每个元素的何使环变量。
在下面的何使环例子中,我们循环遍历一个数字列表,何使环并使用变量digit依次保存每个数字: for digit in [3,何使环1,4,1,5,9]: print (digit)这将打印:
3 1 4 1 5 9如果要遍历生成容器或序列的对象,可以使用 Python 的多重赋值语法将其解包。例如:
for letter, number in [["a",1],["b",2]]: print (letter, number)输出:
a 1 b 2常见的 Python for 循环
以下是 Python for 循环中使用的一些常见对象:
列表
上面的例子展示了如何使用for循环迭代列表。请注意,如果您有一个列表,则for循环提取的源码库每个元素本身就是一个列表。for循环不会自动“展平”任何类型的嵌套结构。
字符串
Python 中的字符串被认为是“序列”——它们可以被迭代,迭代字符串的结果是字符串中的每个字符。
for letter in "Hello world": print (letter)这将产生:
H e l l o w o r l d字典
使用for循环遍历字典会生成字典中的每个键。
d1 = { "a": 1, "b": 2 } for key in d1: print (key)这将产生:
a b如果要遍历字典的值,请使用字典的.values()方法。还可以使用.items()一起遍历键和值:
d1 = { "a": 1, "b": 2 } for key, value in d1.items(): print (key, value)这将产生:
a 1 b 2生成器
生成器生成一系列的项,每次调用一个项。for循环中使用的生成器的一个常见示例是range。
for n in range(50): print (n)这将打印数字 0 到 49。
请注意,仅仅因为可以在for循环中使用生成器,并不意味着生成器最终会自行停止。例如,这个for循环将永远运行:
def forever(): while True: yield 1 for n in forever(): print (n)在这种情况下,需要采取措施确保循环可以终止。(参见下面的“流量控制”。香港云服务器)
在Python for循环中使用索引和枚举
从 C、C++ 或 Java 等语言来到 Python 的开发人员通常会创建一个索引变量,用于逐步遍历正在迭代的对象。举个例子:
x =[ 3 , 1 , 4 , 1 , 5 , 9 ] n = 0而n < len ( x ): print ( x [ n ]) n += 1这本身并没有错,但它忽略了 Python 的工作原理。Python 中的for循环不需要索引;它可以只遍历要迭代的对象,而无需对其进行索引。
但是,有时需要在循环时跟踪正在处理的元素。Python 的enumerate()实用程序对此有所帮助。它需要一个可迭代对象,并在每次迭代时生成索引和该索引处的对象的元组:
x = [3,1,4,1,5,9] for index, n in enumerate(x): print (index, n) 0 3 1 1 2 4 3 1 4 5 5 9Python for 循环中的流量控制
for循环并不总是运行到完成,或完全按顺序运行。假如想提前跳出一个for循环,或者跳过循环中的某个项。为此,Python提供了两个关键字:break和continue。
for n in range(20): if n % 2 == 0: # if n is a multiple of 2 continue # then skip it # everything after this point is not run # if `continue` is invoked print (n) print ("Done")这将产生1 3 5 7 9 11 13 15 17 19,然后Done。请注意,亿华云计算当循环结束时,程序在print(“Done”)处正常继续。
for n in range ( 20 ): if n == 10 : break # 完全离开循环print ( n ) print ( "Done" )打印数字0到9,然后Done。
请注意,如果循环嵌套在其他循环中,break则只会影响当前循环——它不会从所有循环级别退出。从多个for循环中退出需要不同的机制,如sentinel变量:
done = False for n in range(20): for m in range(40): if n==10 and m==10: done = True if done: break if done: breakPython for 循环陷阱
在for循环中迭代对象的元素时,不要做任何会改变成员或序列长度的事情。例如,如果要在一个列表上迭代,则不要在迭代时从列表中添加或删除元素。
如果迭代元素的原因是测试每个元素以查看是否需要添加或删除某些内容,那么有一个更好的解决方案。创建一个新的空容器,仅用要保留的元素填充它,然后用新容器替换旧容器。
下面是一个带有列表的示例。这将创建一个只包含奇数的新列表:
old_list = [1,2,3,4,5,6] new_list = [] for n in old_list: if n % 2: new_list.append(n) old_list = new_list【译稿,合作站点转载请注明原文译者和出处为.com】