我很确定这是一个简单的问题,但我完全不知道如何解决这个问题。我正试图通过关于路线的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中工作我正在绘制一个关于如何动态生成它的空白。
答案 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)]