高效的双循环,其中第二循环的范围取决于第一循环的值

时间:2018-06-17 15:03:54

标签: python performance for-loop itertools

是否有更快的方法(可能使用itertools)来实现下面的代码?

for i in range(0,10):
    for j in range(0,i+1):
        do stuff
    do stuff

感谢。

1 个答案:

答案 0 :(得分:4)

您正在使用替换生成组合,因此itertools.combinations_with_replacement()可以为您生成这些组合,尽管ji已被撤消:

from itertools import combinations_with_replacement

for j, i in combinations_with_replacement(range(10), 2):
    # ...

请注意ji的反转;这会产生与嵌套循环相同的值对,只是顺序不同:

>>> sorted(combinations_with_replacement(range(10), 2)) == sorted((j, i) for i in range(10) for j in range(i + 1))
True