本系列前面 “探索 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
语句。
for
循环的伪代码12345678910111213 | 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
的元素。
for
循环和 tuple
1234567891011121314151617 | >>> 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
循环的容器。
for
循环和 string
123456789101112131415161718192021 | >>> 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
循环。
for
循环和 list