在Python中有更简单的方法写6层嵌套for循环吗?
这个问题让我困扰了一段时间。有没有更简单的方法来写嵌套的 for
循环呢?比如我的代码是这样的:
for y in range(3):
for x in range(3):
do_something()
for y1 in range(3):
for x1 in range(3):
do_something_else()
有没有更简单的方法来实现这个?我知道这段代码是可以工作的,但如果你像我一样不使用两个空格来缩进,可能会遇到一些麻烦。
哦,在这个例子中只有四个嵌套的 for
循环,为了让事情简单一些。
11 个回答
10
当遇到这种程序逻辑时,我可能会把循环的顺序拆分成两个或更多的独立函数。
在Python中,还有一种技巧是尽量使用列表推导式,而不是使用循环。
15
在处理多维空间时,这种情况是比较常见的。我的解决办法是:
xy_grid = [(x, y) for x in range(3) for y in range(3)]
for x, y in xy_grid:
# do something
for x1, y1 in xy_grid:
# do something else
60
如果你经常需要处理像你例子中的笛卡尔积,可能可以看看Python 2.6中的itertools.product这个工具——如果你用的是更早版本的Python,也可以自己写一个类似的功能。
from itertools import product
for y, x in product(range(3), repeat=2):
do_something()
for y1, x1 in product(range(3), repeat=2):
do_something_else()