- 此问题在此处已有答案**:
Avoiding nested for loops(3个答案)
七年前就关门了。
在固体力学中,我经常使用Python并编写如下代码:
for i in range(3):
for j in range(3):
for k in range(3):
for l in range(3):
# do stuff
我经常这样做,以至于我开始怀疑是否有更简洁的方法来做到这一点。当前代码的缺点是:如果我遵守PEP8
,那么我不能超过每行79个字符的限制,并且没有留下太多的空间,特别是如果这又是在类的函数中。
4条答案
按热度按时间w8rqjzmb1#
通过使用嵌套的for循环,你基本上是在尝试创建输入可迭代的(笛卡尔)乘积,这就是
itertools
模块中的product
函数的作用。在您的代码中,您可以执行以下操作:
根据python文档,“* 此函数大致等同于以下代码,只是实际实现不会在内存中构建中间结果:*”
bpzcxfmw2#
使用
itertools.product
的想法很好,下面是一个更通用的方法,它将支持不同大小的范围。gwbalxhn3#
它不会更简洁,因为它将花费您一个生成器函数,但至少您不会被PEP8所困扰:
(in python 2.x,则应在生成器函数中使用
xrange
而不是range
)编辑:
当金字塔的深度已知时,上述方法应该是可行的,但是你也可以用这种方法来创建一个通用的生成器,而不需要任何外部模块:
(我使用
(l, k, j, i)
是因为在上面的生成器中,第一个索引首先变化)cs7cruho4#
这相当于:
如果您一直都在这样做,请考虑使用通用生成器: