生成python列表的二维排列
我有一个python列表,如下所示:生成python列表的二维排列,python,Python,我有一个python列表,如下所示: [['row_0','row_0_0','row_0_1'],['row_1','row_1_0','row_1_1']] 其中父列表中的每个列表称为行,子列表中的每个项目称为列。 例如:['row_0'、'row_0_0'、'row_0_1']是一行。 “行0”、“行0”和“行0”是此行的列 我想以这样的方式生成置换 总行数与原始父列表中的行数相同,即2 每行的列排列仍保留在该行内。例如:['row\u 0','row\u 0','row\u 0\u 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']
是一行。
“行0”、“行0”和“行0”是此行的列
我想以这样的方式生成置换
['row\u 0','row\u 0','row\u 0\u 1']
可以有一个排列['row\u 0','row\u 0','row\u 0']
,['row\u 0','row\u 0\u 0','row\u 0\u 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)
[
[['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']],
]
但这只会在父列表级别生成排列。我想知道python是否有一个内置工具来处理这样的功能,可以根据我的需要进行调整。如有任何建议,将不胜感激
编辑
我想要的输出是这样的:
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)
[
[['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父列表和子列表的项目总数保持不变。据我所知,您描述的内容没有内置函数
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']]]
看起来您只需要执行两次或在不同的嵌套级别执行
itertools.permutations()。也许,有两个具体的输入和预期的输出会更清楚。或者,如果您不想排列两次,请重新排列为1d,排列并解释为2D您正在以元组的形式创建第三个列表。它应该保持嵌套在2级。@sshussain270是否显示预期的output@sshussain270您可能还需要一个步骤product
这样就可以了!不确定为什么所有列表及其子列表都已转换为元组。如果让它生成列表而不是元组,我可以将其标记为correct@WeNYoBen顺便说一句,对排列的结果调用列表
是不必要的,因为您无论如何都在迭代它。