如何使用itertools.product实现有依赖关系的嵌套循环?
问题解答
你需要的嵌套循环本质是生成所有满足 i < j 的有序整数对,itertools.product 本身不支持两个输入迭代器之间的动态依赖,所以无法直接通过传固定的range参数实现符合要求的输出,有两种可行方案:
方案1:用itertools.product加过滤(符合指定用product的要求)
先生成全量笛卡尔积,再过滤出符合j > i的结果:
import itertools n = 5 for i, j in itertools.product(range(n), range(n)): if j > i: # 此处写你的业务逻辑 print((i, j))
该方案写法简单,缺点是会生成多余的不符合条件的配对,n数值较小时使用无压力。
方案2:用更适配场景的itertools.combinations(推荐)
你需要的无重复、按索引升序的二元组合,原生匹配itertools.combinations的功能,不需要额外过滤,性能更高,尤其适合n较大的场景:
import itertools n = 5 for i, j in itertools.combinations(range(n), 2): # 此处写你的业务逻辑 print((i, j))
以上两种方案的输出都和你原有的双层嵌套循环完全一致。
内容的提问来源于stack exchange,提问作者Abhijit Sarkar
相关产品推荐
相关产品推荐

