【问题标题】:Is there a shortform for nested range-using for loops in Python? [duplicate]Python 中是否有嵌套范围使用 for 循环的简写形式? [复制]
【发布时间】:2020-03-02 19:52:28
【问题描述】:

在为大学实现矩阵乘法时,我最终得到了一个 3 次嵌套的 for 循环,只使用范围。 我个人不喜欢嵌套,并问自己 Python 中是否有一些东西可以“简化”这种特殊情况的语法。

我在网上查到了,但不幸的是我找不到任何东西。

我得到的代码看起来有点像这样:

for i in range(a):
    for j in range(b):
        for k in range(c):
            # some stuff

由于 Python 能够返回多个值,我认为应该有一些迭代器返回 N 个嵌套范围使用 for 循环的 N 个索引,例如:

# this should do the exact same thing like the above example
for i, j, k in nrange((a), (b), (c)):
    # some stuff

nrange 的每个参数都是一个参数元组,然后通过 * 运算符传递给 range。所以nrange((a1, a2, a3), (b1, b2, b3)) 也应该是可能的。 我的问题,这是否存在,如果不存在,为什么?

提前谢谢你。 :)

【问题讨论】:

  • 您可以使用itertools 库和itertools.product() 函数。但是,使用内置函数在 numpy 中进行矩阵计算的效率要高得多。
  • 您可以查看这些答案以查找单行嵌套 for 循环 stackoverflow.com/questions/17006641/…

标签: python for-loop range


【解决方案1】:

是的,有itertools.product

from itertools import product
for i,j,k in product(range(3),range(3),range(3)):
    print(i,j,k)

输出:

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2

【讨论】:

  • 绝对是这样做的最佳方法,尽管按照 OP 的原始形式显示它可能很有用 - 例如for i, j, k in product(range(3),range(3),range(3)):
  • 你是对的,我编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多