for 循环
本系列前面 “探索 Python(5): 用 Python 编程 —— 控制流” 一文讨论了 if
语句和 while
循环,讨论了复合语句以及适当缩进 Python 语句来指示相关 Python 代码块。该文的结尾介绍了 Python for
循环。但就其使用和功能来说,for
循环更值得关注,所以本文单独讲述该循环。
for
循环有一个简单的语法,使您可以从容器对象中提取单个项目并对其进行某些操作。简单地说,使用 for
循环,可以迭代中对象集合的项目。对象集合可以是任何 Python 容器类型,包括前面文章中讨论的 tuple
、string
和 list
类型。但是容器 metaphor 的功能比这三种类型更强大。metaphor 包括其他序列类型,如 dictionary
和 set
,将来的文章中将对它们进行讨论。
但是请稍等!还有更多信息:for
循环可以用于迭代支持迭代 metaphor 的任何对象,这使 for
循环非常有用。
清单 1 中显示了 for
循环的基本语法,还演示了如何在 for
循环中使用 continue
和 break
语句。
清单 1. for
循环的伪代码
1 2 3 4 5 6 7 8 9 10 11 12 13 |
for item in container: if conditionA: # Skip this item continue elif conditionB: # Done with loop break # action to repeat for each item in the container else: # action to take once we have finished the loop. |
本系列中的第二篇文章 “探索 Python(2): 探索 Python 类型的层次结构 —— 了解对象和容器” 介绍了 Python tuple
。如文中所述,tuple
类型是不可变的异构容器。这主要是说 tuple
可以存放不同类型的对象,但是它一旦创建,就无法更改。清单 2 演示了如何使用 for
循环迭代 tuple
的元素。
清单 2. for
循环和 tuple
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
>>> t = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) >>> count = 0 >>> for num in t: ... count += num ... else: ... print count ... 45 >>> count = 0 >>> for num in t: ... if num % 2: ... continue ... count += num ... else: ... print count ... 20 |
本例首先创建了名为 t
的 tuple
,存放整数 0 至 9(包含 9)。第一个 for
循环迭代此 tuple
,在 count
变量中累计 tuple
中数值的和。一旦代码已经迭代了 tuple
中的所有元素,它将进入 for
循环的 else
子句,打印 count
变量的值。
清单 2 中显示的第二个 for
循环也迭代 tuple
中的所有元素。但是,它仅累计容器中能够被 2 整除的那些项的值(请记住如果表达式为非零,if
语句将确定为真,num
不能被 2 整除时使用 %
运算符会返回非零值)。此限制通过使用适当的 if
语句和 continue
语句来完成。如前面的文章中所述,continue
语句使包含它的循环开始下一次迭代。实现相同结果的另一种方法是测试 tuple
中的当前项是否是偶数(使用if not num % 2:
),如果为真,那么将当前项添加到运行总和中。一旦代码完成 tuple
中的迭代,将调用 else
子句,打印总和。
本系列中的第三篇文章 “探索 Python(3): 探索 Python 类型的层次结构 —— 使用字符串” 讨论了 Python string
。string
是不可变的同构容器,这意味着它仅能存放字符且一旦建立将无法修改。清单 3 演示了如何使用 Python string
作为 for
循环的容器。
清单 3. for
循环和 string
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
>>> st = "Python Is A Great Programming Language!" >>> for c in st: ... print c, ... P y t h o n I s A G r e a t P r o g r a m m i n g L a n g u a g e ! >>> count = 0 >>> for c in st: ... if c in "aeiou": ... count += 1 ... else: ... print count ... 10 >>> count = 0 >>> for c in st.lower(): ... if c in "aeiou": ... count += 1 ... else: ... print count ... 12 |
本例提供了三个不同的 for
循环,它们都迭代同一 string
。第一个 for
循环迭代 string
“Python Is A Great Programming Language!” 并一次打印 string
中的一个字符。在此例中,print
语句变量 c
后加了一个逗号。这使 print
语句打印字符值时后面跟着空格字符,而不是换行字符。如果没有后面的逗号,字符将全部打印在单独的行中,会很难读。
下两个 for
循环迭代该字符串并计算其包含多少个元音字母(“a”、“e”、“i”、“o” 或 “u”)。第二个 for
循环在迭代原始 string
时仅查找小写元音字母。第三个 for
循环迭代通过调用 string
对象的 lower
方法返回的临时 string
。lower
方法将 string
中的所有字符转换为小写。因此,第三个 for
循环可找到另外两个元音字母。
本系列中的第四篇文章 “探索 Python(4): 探索 Python 类型的层次结构 —— 使用列表” 介绍了 Python list
。list
是异构可变容器,这意味着它可以存放不同类型的对象且创建后可以修改。清单 4 演示了如何使用 list
和 for
循环。