一个笛卡尔积的python迭代器如何生成?

2024-06-16 08:59:07 发布

您现在位置: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 101问题:

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

  2. 有没有可能将这一点扩展到不仅生成三胞胎,还生成4-plets、5-plets等等?


Tags: 代码infor状态site情况range三元组
2条回答
import itertools
site_range=[0,1,2]
[x for x in itertools.product(site_range, repeat=len(site_range))]

使用^{}

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

编辑正如@Glenn Maynard在评论中指出的那样,这不是笛卡尔积。为此,您必须检查his answer。在

相关问题 更多 >