将每个列表元素与状态的唯一组合配对

时间:2018-08-07 10:38:41

标签: python

我试图用我认为微不足道的东西来学习python 3,但实际上让我有点生气。

我有两个列表。

items=['a','b','c']
states=[0, 1, -1]

并且我想生成 state 的所有唯一组合,这些项可以具有...,因此在本示例中,它将以...开始。

 1, 1, 1
 1, 1, 0
 1, 1,-1
 ..

注意 :顺序很重要,并且1、0、0与0、1、0不同

然后,如果我们添加另一个项目,它将最终成为..

 1, 1, 1, 1
 1, 1, 1, 0
 1, 1, 1,-1
 ..

此刻,我对语法有些沮丧,并且不确定100%是否有可能,但是一直在尝试使用itertools.permutations和'generator'的概念来解决这个问题? / p>

所以,我开始尝试获取状态的排列。

itertools.permutations(states)
[(0, 1, -1), (0, -1, 1), (1, 0, -1), (1, -1, 0), (-1, 0, 1), (-1, 1, 0)]

,然后将它们与项目列表一起加入。

[(x,items) for x in itertools.permutations(states)]
[((0, 1, -1), ['a', 'b', 'c']), ((0, -1, 1), ['a', 'b', 'c']), ((1, 0, -1), ['a', 'b', 'c']), ((1, -1, 0), ['a', 'b', 'c']), ((-1, 0, 1), ['a', 'b', 'c']), ((-1, 1, 0), ['a', 'b', 'c'])]

但是所有这一切都是将我当前在列表中的状态列表随机化。也就是说,我没有1,1,1或0,0,0

任何人都可以向我提供一些建议。.我敢肯定这必须已经完成!

1 个答案:

答案 0 :(得分:1)

您可能正在寻找itertools.product

from itertools import product

[list(zip(x, item)) for x in product(states, repeat=3)]

[[(0, 'a'), (0, 'b'), (0, 'c')],
 [(0, 'a'), (0, 'b'), (1, 'c')],
 [(0, 'a'), (0, 'b'), (-1, 'c')],
 [(0, 'a'), (1, 'b'), (0, 'c')],
 [(0, 'a'), (1, 'b'), (1, 'c')],
 [(0, 'a'), (1, 'b'), (-1, 'c')],
 [(0, 'a'), (-1, 'b'), (0, 'c')],
 [(0, 'a'), (-1, 'b'), (1, 'c')],
 [(0, 'a'), (-1, 'b'), (-1, 'c')],
 [(1, 'a'), (0, 'b'), (0, 'c')],
 [(1, 'a'), (0, 'b'), (1, 'c')],
 [(1, 'a'), (0, 'b'), (-1, 'c')],
 [(1, 'a'), (1, 'b'), (0, 'c')],
 [(1, 'a'), (1, 'b'), (1, 'c')],
 [(1, 'a'), (1, 'b'), (-1, 'c')],
 [(1, 'a'), (-1, 'b'), (0, 'c')],
 [(1, 'a'), (-1, 'b'), (1, 'c')],
 [(1, 'a'), (-1, 'b'), (-1, 'c')],
 [(-1, 'a'), (0, 'b'), (0, 'c')],
 [(-1, 'a'), (0, 'b'), (1, 'c')],
 [(-1, 'a'), (0, 'b'), (-1, 'c')],
 [(-1, 'a'), (1, 'b'), (0, 'c')],
 [(-1, 'a'), (1, 'b'), (1, 'c')],
 [(-1, 'a'), (1, 'b'), (-1, 'c')],
 [(-1, 'a'), (-1, 'b'), (0, 'c')],
 [(-1, 'a'), (-1, 'b'), (1, 'c')],
 [(-1, 'a'), (-1, 'b'), (-1, 'c')]]

或者,还有combinations_with_replacement()

from itertools import combinations_with_replacement

[list(zip(x, item)) for x in combinations_with_replacement(states, 3)]

[[(0, 'a'), (0, 'b'), (0, 'c')],
 [(0, 'a'), (0, 'b'), (1, 'c')],
 [(0, 'a'), (0, 'b'), (-1, 'c')],
 [(0, 'a'), (1, 'b'), (1, 'c')],
 [(0, 'a'), (1, 'b'), (-1, 'c')],
 [(0, 'a'), (-1, 'b'), (-1, 'c')],
 [(1, 'a'), (1, 'b'), (1, 'c')],
 [(1, 'a'), (1, 'b'), (-1, 'c')],
 [(1, 'a'), (-1, 'b'), (-1, 'c')],
 [(-1, 'a'), (-1, 'b'), (-1, 'c')]]