【问题标题】:How can I get rid of multiple nested for loops?如何摆脱多个嵌套的 for 循环?
【发布时间】:2020-02-21 17:22:00
【问题描述】:

我有一个 Python (3.2) 脚本,用于搜索具有我想要的属性的点。但它有这个丑陋的部分:

for x in range(0,p):
  for y in range(0,p):
    for z in range(0,p):
      for s in range(0,p):
        for t in range(0,p):
          for w in range(0,p):
            for u in range(0,p):
              if isagoodpoint(x,y,z,s,t,w,u,p):
                print(x,y,z,s,t,w,u)
              else:
                pass

我可以做些什么让它看起来更好一点吗?

【问题讨论】:

标签: python python-3.x nested-loops python-3.2


【解决方案1】:

您可以使用itertools 来简化您的代码:

from itertools import product

def print_good_points(p, dimensions=7):
    for coords in product(range(p), repeat=dimensions):
        args = coords + (p,)
        if isagoodpoint(*args):
            print(*coords)

如上所述,这解决了您的问题;但是,我不确定您是否真的想在 isagoodpoint() 的参数中包含 p 。如果没有,您可能会丢失添加它的行:

from itertools import product

def print_good_points(p, dimensions=7):
    for coords in product(range(p), repeat=dimensions):
        if isagoodpoint(*coords):
            print(*coords)

代码中的行

else:
    pass

顺便说一句,什么都不做。另外,range(0, p) 等价于range(p)

还有……以防你不熟悉在函数调用中使用*

http://docs.python.org/3.2/reference/expressions.html#index-34

【讨论】:

  • 你可以使用product(range(p), repeat=dimensions)而不是product(*repeat etc.)(即使用repeat关键字参数而不是repeat函数)。
【解决方案2】:

您可以使用以下内容:

for x, y, z in product(range(0,p), range(0,p), range(0,p)):
    print(x,y,z)

for x, y, z in product(range(0,p), repeat=3):
    print(x,y,z)

对于python2.7,您需要from itertools import product

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    相关资源
    最近更新 更多