考虑下面这段代码
for a in generator1():
if test(a):
for b in generator2():
if test(a, b):
for c in generator3():
if test(a, b, c):
print "Found {} {} {}".format(a, b, c)在每次循环之前使用test是很重要的,因为生成器可以产生很多值(10^6-10^8)。我不想做昂贵的计算,因为很明显,由于a或b的值,整个三元组将无法通过测试。
这段代码可以简化吗?如果我想添加更多的内部循环(测试4个5)怎么办?
发布于 2016-03-15 19:07:18
下面是一个使用itertools和all进行切片的示例:
ag = range(10)
bg = range(10)
cg = range(10)
import itertools
# only returns true if all numbers are equal
def test(args):
return len(set(args)) <= 1
for comb in itertools.product(ag, bg, cg):
if all(test(comb[:limit]) for limit in range(len(comb) + 1)):
print "found", combitertools生成generators.all的所有组合我使用切片来生成所有参数(列表的前缀)。https://stackoverflow.com/questions/36008887
复制相似问题