繁体   English   中英

生成python列表的二维排列

[英]Generate 2 dimensional permutations of a python list

我有一个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']],
]

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

据我了解,您所描述的没有内置功能

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM