我有一个如下的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”是该行的列。
我想以这样的方式生成排列
总行数与原始父列表(即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']
。
每行的第一列在排列上永远不会改变。例如:“ 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。父级和子级列表的项目总数保持不变。
答案 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']]]