在python中有一种更简单的方法来编写6个嵌套for循环吗?

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)

  • 同样,如果您有大量元素要遍历,则最好使用生成器表达式,即xy_grid =(对于(30000)中的x,(x,y)对于(30000)中的y)。 (2认同)

Gre*_*ill 10

当面对那种程序逻辑时,我可能会将循环序列分解为两个或多个单独的函数.

Python中的另一种技术是尽可能使用列表推导,而不是循环.


Ric*_*dle 8

假设每个循环都有某种独立的含义,请将它们分解为命名函数:

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-)

  • 如果我是狮子,我会做狮子. (4认同)
  • 哇,没有小猫:( (3认同)
  • 嗯,这是获得小猫的一种方式......虽然比我想象的稍大一些. (3认同)

Pav*_*aev 5

从技术上讲,您可以itertools.product用来获取N个序列的笛卡尔积,然后对其进行迭代:

 for y, x, y1, x1 in itertools.product(range(3), repeat=4):
   do_something_else()
Run Code Online (Sandbox Code Playgroud)

但是我不认为这实际上会赢得任何可读性方面的知识。