列表列表的Python排列

时间:2013-03-31 23:19:02

标签: python algorithm

我有一份列表清单,例如:

[ 
  [ 
    [ 1, 2, 3 ], [ 3, 2, 1 ], [ 3, 1, 2 ] 
  ], 
  [ 
    [ 4, 5, 6 ], [ 6, 4, 5 ] 
  ],
  [ 
    [ 8, 9, 10 ], [ 10, 8, 9 ], [ 10, 9, 8 ]
  ]
]

我需要找到这些中间列表的所有排列,垂直作为列...

[
  [
    [ 1, 4, 8 ], [ 1, 4, 10 ], [ 1, 4, 10 ], 
    [ 1, 6, 8 ], [ 1, 6, 10 ], [ 1, 6, 10 ],
    [ 3, 4, 8 ], [ 3, 4, 10 ], [ 3, 4, 10 ],
    [ 3, 6, 8 ], [ 3, 6, 10 ], [ 3, 6, 10 ],
    [ 3, 4, 8 ], [ 3, 4, 10 ], [ 3, 4, 10 ],
    [ 3, 6, 8 ], [ 3, 6, 10 ], [ 3, 6, 10 ]
  ],
  ...
]

很难解释,但基本上,每个具有3个不同数字的列表都是每行中可能的“行”...因此第0行可以是1,2,3或3,2,1或3, 1,2 ...

我需要做的是找到每列的所有可能列,这意味着循环遍历每个可能的行组合并从该行组合生成列。

如果有人知道我的意思并且可以更好地说出来,或者可以帮助我解决它,请做!我觉得像itertools.permutations会帮助我,但我无法弄清楚如何告诉它挑选每一行可能的行......

由于

1 个答案:

答案 0 :(得分:0)

因此,如果不为您编写整个解决方案,我认为您可以相当容易,您只需要编写按您想要的顺序抓取列表的算法。让我看看我是否可以写一个小例子:

first loop through:

ixx xxx xxx
ixx xxx xxx
ixx xxx xxx

second loop through:

ixx xxx xxx
ixx xxx xxx
xix xxx xxx

third loop through:

ixx xxx xxx
ixx xxx xxx
xxi xxx xxx

在您最大的列表中,您可以使用yxz坐标来获取每个字母,然后慢慢地xy直到他们需要翻转并增加z

                         y  x  z
 first_val = master_list[0][0][0] #1
second_val = master_list[1][0][0] #4
 third_val = master_list[2][0][0] #8

然后你必须以同样的方式将三个val放入一组类似的列表中。