python - 如何摆脱多个嵌套的 for 循环?

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

我有一个 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

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

最佳答案

您可以使用 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

关于python - 如何摆脱多个嵌套的 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899893/

相关文章:

python - 为什么 Visual Studio Code 无法识别我的 WSL bash python?

python - 为什么从 QListWidgetItem 和 QObject 派生时会崩溃

python - 为什么 irfftn(rfftn(x)) 不等于 x?

python - Google Cloud Storage bucket list_blobs 前缀太宽泛

c++ - 安装 Dlib 时找不到 Boost

iterator - 在嵌套迭代器中指定生命周期以进行展平

Python 文件-IO 和 zipfile。尝试循环遍历文件夹中的所有文件,然后使用Python循环遍历各个文件中的文本

python - 缺少来自 python 脚本的范围错误松弛消息

python-3.x - 在python包中查找某些方法和函数的所有用法

java - 嵌套While循环逻辑错误