首页 > 解决方案 > 高效的 double for 循环,其中第二个循环的范围取决于第一个循环的值

问题描述

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

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

谢谢。

标签: pythonperformancefor-loopitertools

解决方案


您正在生成带有 replacement 的组合,因此itertools.combinations_with_replacement()可以为您生成这些组合,尽管使用ji反转:

from itertools import combinations_with_replacement

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

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

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

推荐阅读