在 Python 中编写循环Loops的艺术(The Art of Writing Loops in Python)
文章目录
Simple is better than complex – 简单胜于复杂
for 循环是大多数编程语言中非常基本的控制流工具。例如,C 语言中一个简单的 for 循环如下所示:
int i;
for (i=0;i<N;i++)
{
//do something
}
对于复杂的场景,我们通常需要编写难看的嵌套循环nested loops或定义大量辅助变量assistant variables(如上述代码中的 i
)。
幸运的是,在 Python中事情就变得方便多了。我们有很多技巧来编写更优雅的循环loops,它们确实让我们的生活变得更轻松。在 Python 中,嵌套循环nested loops不是不可避免的,辅助变量assistant variables也不是必须的,我们甚至可以自己定制 for 循环。
本文将介绍在 Python 中编写循环loops的一些最有用的技巧tricks。希望它能帮助您感受 Python 之美。
一次获取索引Indexes和值Values
使用 for 循环的一个常见场景是从列表list中获取索引indexes和值values。当我开始学习 Python 时,我写的代码如下:
for i in range(len(my_list)):
print(i, my_list[i])
这当然行得通。但还不够 Pythonic。几个月后,我找到了标准的 Pythonic 方法:
for i, v in enumerate(my_list):
print(i, v)
如上所示,内置的built-in enumerate
函数function可以让我们的生活变得更轻松。
通过 Product 函数避免嵌套循环Nested Loops
嵌套循环Nested loops令人头疼。它们会降低代码的可读性readability并使事情变得复杂complex。例如,跳出嵌套循环breaking out of the nested loops通常不是很容易。我们需要知道最内层循环inner-most loop何时被破坏,第二个最内层循环second inner-most loop何时被破坏,等等。
幸运的是,Python 内置的built-in itertools
模块中有一个很棒的函数function,叫做 product
。我们可以使用它来避免编写大量嵌套循环nested loops。
让我们通过一个简单的例子来感受一下它有多有用:
list_a = [1, 2020, 70]
list_b = [2, 4, 7