亲爱的, 给定一个变量,比如三个值,我试图生成所有可能的组合,例如,这些变量的三元组。
虽然这段代码可以解决问题,
site_range=[0,1,2]
states = [(s0,s1,s2) for s0 in site_range for s1 in site_range for s2 in site_range]
它有点,嗯,笨拙,如果我尝试对三个以上变量的组合做同样的事情,情况会变得更糟
因此,我的Python 101问题:
如何使用迭代器重写上面的代码?我的意思是,是否有可能产生一个迭代器,它会产生上述“状态”的元素?
是否可以扩展此功能,不仅可以生成三联体,还可以生成4粒,5粒等等?
答案 0 :(得分:4)
import itertools
site_range=[0,1,2]
[x for x in itertools.product(site_range, repeat=len(site_range))]
答案 1 :(得分:3)
>>> site_range=[0,1]
>>> list(product(site_range, repeat=3))
[000 001 010 011 100 101 110 111]
编辑正如@Glenn Maynard在评论中指出的那样,这不是笛卡尔积。为此,您必须检查his answer。