考虑以下代码
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
整个三元组的值不能通过测试时,我不想进行昂贵的计算。
这段代码可以简化吗?如果我想添加更多内部循环(五个测试四个)会怎么样?
答案 0 :(得分:0)
以下是使用CSVFieldMappingException
和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", comb
生成所有生成器组合。itertools
代替all
s。