首页 > 解决方案 > 生成 python 列表的二维排列

问题描述

我有一个python列表如下:

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

其中父列表中的每个列表称为 a row,子列表中的每个项目称为 a 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' in 和 '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']],
]

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

标签: python

解决方案


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

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']]]

推荐阅读