Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
生成python列表的二维排列_Python - Fatal编程技术网

生成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

我有一个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\u 0','row\u 0','row\u 0']
    ['row\u 0','row\u 0\u 0','row\u 0\u 1']

  • 每行的第一列在排列中从不改变。例如,“行0”和“行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顺便说一句,对
    排列的结果调用
    列表
    是不必要的,因为您无论如何都在迭代它。