1

亲爱的,给定一个变量,比如说,三个值,我试图生成所有可能的组合,比如这些变量的三元组。

虽然这段代码可以解决问题,

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 问题:

  1. 如何使用迭代器重写上面的代码?我的意思是,是否有可能有一个迭代器来产生上述“状态”的元素?

  2. 是否可以将其扩展为不仅生成三胞胎,还生成 4-plet、5-plet 等?

4

2 回答 2

4
import itertools
site_range=[0,1,2]
[x for x in itertools.product(site_range, repeat=len(site_range))]
于 2010-10-25T10:42:23.957 回答
3

使用itertools.product

>>> site_range=[0,1]
>>> list(product(site_range, repeat=3))
[000 001 010 011 100 101 110 111]

编辑正如@Glenn Maynard 在评论中指出的那样,这不是笛卡尔积。为此,您将不得不检查他的答案

于 2010-10-25T10:42:04.333 回答