如何用Python迭代器生成多个变量的笛卡尔积?

1 投票
2 回答
834 浏览
提问于 2025-04-16 06:03

大家好,

我有一个变量,它可以取三个值。我想生成这些变量的所有可能的三元组组合。

虽然下面的代码可以实现这个功能,

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入门的问题:

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

  2. 是否可以扩展这个方法,不仅生成三元组,还能生成四元组、五元组等等?

2 个回答

3

使用 itertools.product

>>> 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))]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答