Python itertools对多个数组的permutations()用法

2024-10-02 14:29:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python构建字典列表,目的是逐个遍历每个字典并连接所有不同的组合。在字典中,每个“产品”有三个不同的组成部分:

1)字母,例如'A'(产品代码的第一部分,对每个产品条目都是唯一的)。假设范围是:

['A', 'B', 'C']

2)字母和数字,例如'S2'(第二部分有几个变体…可能是'D3''E5'

3)一个句点('.')和一个字母,例如'.X'(第三部分,每个产品条目都是唯一的)。假设范围是:

['.X', '.Y', '.Z']

由于上面列出的第二部分有最多的变化,我的初始假设是将第一部分和第三部分一起构建dicts列表,以减少不同列表的数量dicts,因为它们是唯一成对的,例如A.Z'…但是,我仍然需要拆分每个条目,然后通过一些“连接”命令在它们之间插入第二部分。所以,问题是:如果我有另一个包含第二部分所有变体的dict列表,我应该使用什么函数来构建产品的所有变体?你知道吗

示例的总组合:

ListOne = ['A', 'B', 'C']
ListTwo = ['D3', 'D4', 'D5', 'E3', 'E4', 'E5']
ListThr = ['.X', '.Y', '.Z']

我需要创建新的dicts列表作为所有三个dicts列表的串联,例如'AD3.X',但是ListOneListThr没有变体,它总是'A''.X''B'匹配,并且'C''.Y'匹配…ListTwoListOneListThr产品之间串联的产品将需要迭代,因此所有可能的组合都作为一个新的dict列表输出,例如

ListOneNew = ['AD3.X', 'AD4.X', AD5.X', 'AE3.X', 'AE4.X', 'AE5.X']
ListTwoNew = ['BD3.Y', 'BD4.Y', 'BD5.Y', <and so on...>]

为了简单起见,脚本应该有ListOneListThr的合并版本吗

List = ['A.X', 'B.X', 'C.Z']

然后用ListTwo产品拆分并连接,或者只使用三个List产品并从那里连接?你知道吗


Tags: 列表字典产品字母条目变体dictlist
2条回答

有列表理解

final = sorted([a+b+c for c in DictThr for b in DictTwo for a in DictOne])
from itertools import product

result = [a[0] + a[1] + a[2] for a in list(product(DictOne, DictTwo, DictThr))]

相关问题 更多 >