sal*_*leh 38 python for-loop nested-loops
这个问题现在已经有一段时间了.有没有更简单的方法for在python中编写嵌套循环?例如,如果我的代码是这样的:
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()
Run Code Online (Sandbox Code Playgroud)
会有更简单的方法吗?我知道这段代码有效但是当你缩进而不是像我一样使用2个空格时,它可能会成为一个问题.
在示例中,只有4个嵌套for循环使事情变得更容易.
Ali*_*ell 58
如果您经常在示例中迭代笛卡尔积,那么您可能需要研究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()
Run Code Online (Sandbox Code Playgroud)
tom*_*m10 14
循环遍历多维空间时,这是很常见的.我的解决方案是:
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
Run Code Online (Sandbox Code Playgroud)
假设每个循环都有某种独立的含义,请将它们分解为命名函数:
def do_tigers():
for x in range(3):
print something
def do_lions():
do_lionesses()
for x in range(3):
do_tigers()
def do_penguins():
for x in range(3):
do_lions()
..etc.
Run Code Online (Sandbox Code Playgroud)
我或许可以选择更好的名字.8-)
从技术上讲,您可以itertools.product用来获取N个序列的笛卡尔积,然后对其进行迭代:
for y, x, y1, x1 in itertools.product(range(3), repeat=4):
do_something_else()
Run Code Online (Sandbox Code Playgroud)
但是我不认为这实际上会赢得任何可读性方面的知识。