生成联合分发列表

时间:2013-02-10 22:01:29

标签: python list dynamically-generated

我很确定这是一个简单的问题,但我完全不知道如何解决这个问题。我正试图通过关于路线的PGM课程,并开始联合概率分布。因此,我试图生成给定n个变量的所有可能分布的列表,其中每个变量可以采用0 ...之间的一些离散值...

所以例如说我们有3个变量,每个变量都可以采用0和1的值我想生成这个:

[[0, 0, 1]
[0, 1, 0]
[1, 0, 0]
[1, 1, 0]
[0, 1, 1]
[1, 1, 1]
[1, 0, 1]
[0, 0, 0]]

我在python中工作我正在绘制一个关于如何动态生成它的空白。

3 个答案:

答案 0 :(得分:3)

如果您更喜欢列表理解:

[[a, b, c] for a in range(2) for b in range(2) for c in range(2)]

我忘了提到你可以使用pprint来获得你想要的效果:

>>> import pprint  
>>> pprint.pprint([[a, b, c] for a in range(2) for b in range(2) for c in range(2)])  
[[0, 0, 0],  
 [0, 0, 1],  
 [0, 1, 0],  
 [0, 1, 1],  
 [1, 0, 0],  
 [1, 0, 1],  
 [1, 1, 0],  
 [1, 1, 1]]  
>>>   

答案 1 :(得分:2)

听起来你想要笛卡尔积:

from itertools import product
for x in product([0,1], [0,1], [0,1]):
    print x
  

[0,0,0]
  [0,0,1]
  [0,1,0]
  [0,1,1]
  [1,0,0]
  [1,0,1]
  [1,1,0]
  [1,1,1]

答案 2 :(得分:1)

与Nathan的方法相比略有改进:

>>> import itertools
>>> list(itertools.product([0, 1], repeat=3))
[(0, 0, 0),
 (0, 0, 1),
 (0, 1, 0),
 (0, 1, 1),
 (1, 0, 0),
 (1, 0, 1),
 (1, 1, 0),
 (1, 1, 1)]