有一个这样的需求,要求从1到100的整数中随机取10个数,并且10个数的和要求是100,那么这样的组合有哪些?
直接上代码:
import itertools
[x for x in itertools.combinations(range(1, 101), 10) if sum(x) == 100]
当然,这样的列表推导,代码简洁优美,但是执行效率确实很低很低。为了提高执行效率,我们使用一个生成器(Generator)。
import itertools
combination = (x for x in itertools.combinations(range(1, 101), 10) if sum(x) == 100)
for c in combination:
print(c)
这样,就可以快速的把代码打印出来了,比单纯的列表推导快多了。
注意:使用生成器,我们把结果赋值给变量combination,这个变量仅仅能被调用一次,第二次的时候,变量已经变为空值。