生成python列表的二维排列

时间:2019-07-21 00:39:13

标签: python

我有一个如下的python列表:

[['row_0','row_0_0','row_0_1'],['row_1','row_1_0','row_1_1']]

,其中父列表中的每个列表称为row,子列表中的每个项目称为column。 例如:['row_0','row_0_0','row_0_1']是一行。 “ row_0”,“ row_0_0”和“ row_0_1”是该行的列。

我想以这样的方式生成排列

  1. 总行数与原始父列表(即2)相同。

  2. 每行列的排列保留在该行内。例如:['row_0','row_0_0','row_0_1']可以有一个排列['row_0','row_0_1','row_0_0']['row_0','row_0_0','row_0_1']

  3. 每行的第一列在排列上永远不会改变。例如:“ row_0”和“ row_1”始终始终是列表中的第一项。

到目前为止,我已实现的内容如下:

perm_list =  [['row_0','row_0_0','row_0_1'],['row_1','row_1_0','row_1_1']]
all_permutations = list(itertools.permutations(perm_list, len(perm_list))
print(all_permutations)

,但这只会在父级列表级别生成排列。我想知道python是否具有内置工具来处理这样的功能,可以对其进行调整以满足我的需求。任何建议将不胜感激。

编辑

我正在寻找的输出是这样的:

[
  [['row_0','row_0_0','row_0_1'],['row_1','row_1_0','row_1_1']],
  [['row_0','row_0_1','row_0_0'],['row_1','row_1_1','row_1_0']],
  [['row_1','row_1_0','row_1_1'],['row_0','row_0_0','row_0_1']],
  [['row_1','row_1_1','row_1_0'],['row_0','row_0_1','row_0_0']],
]

a。每个子列表中的第一项保持不变。 b。每个子列表中的项目都保留在该列表中。 C。父级和子级列表的项目总数保持不变。

1 个答案:

答案 0 :(得分:1)

据我所知,您所描述的内容没有内置功能

l1=[[list((x[0],)+y) for y in itertools.permutations(x[1:], len(x)-1)] for x in l ]
list(map(list,itertools.product(l1[0],l1[1])))
[[['row_0', 'row_0_0', 'row_0_1'], ['row_1', 'row_1_0', 'row_1_1']], 
[['row_0', 'row_0_0', 'row_0_1'], ['row_1', 'row_1_1', 'row_1_0']], 
[['row_0', 'row_0_1', 'row_0_0'], ['row_1', 'row_1_0', 'row_1_1']], 
[['row_0', 'row_0_1', 'row_0_0'], ['row_1', 'row_1_1', 'row_1_0']]]