python - 生成 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' 是这一行的列。
我想以这样的方式生成排列
总行数与原始父列表中的相同,即 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' 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。父子列表的项目总数保持不变。
解决方案
据我所知,您所描述的内容没有内置功能
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']]]
推荐阅读
- allure - 如何使当前的诱惑报告结果文件擦除前一个
- python - 在功能打开和编写中需要帮助
- python - 用诗歌在不同平台上安装不同版本的包
- javascript - CSS 或 JS - 从 html 中隐藏旧元素
- javascript - 在 vue.js 中使用 axios 打印来自 http GET 请求的响应?
- csv - 如何在 Symfony5 中使用 Serializer 规范化日期时间
- database - 加密货币支付网关数据库架构
- azure - Azure AD B2C 创建租户
- python - 两个文件的差异检查器并显示不同的行
- azure - 将表数据从 SQL Server 2016 传输到 Microsoft Azure Synapse