如何用Python迭代器生成多个变量的笛卡尔积?
大家好,
我有一个变量,它可以取三个值。我想生成这些变量的所有可能的三元组组合。
虽然下面的代码可以实现这个功能,
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入门的问题:
我该如何用迭代器重写上面的代码?我的意思是,是否可以有一个迭代器来生成上面“状态”的元素?
是否可以扩展这个方法,不仅生成三元组,还能生成四元组、五元组等等?
2 个回答
3
>>> site_range=[0,1]
>>> list(product(site_range, repeat=3))
[000 001 010 011 100 101 110 111]
编辑 正如 @Glenn Maynard 在评论中指出的,这并不是笛卡尔积。要了解笛卡尔积,你需要查看 他的回答。
4
import itertools
site_range=[0,1,2]
[x for x in itertools.product(site_range, repeat=len(site_range))]
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。