我正在尝试创建排列,它遵循Python中的数据树设计。根目录应该是动态的,并且可以包含一个列表列表。
此图显示了应该如何创建排列
箭头显示允许的组合。
这张图片解释了每一级中可以组合的内容
我尝试过使用itertools.permutation,但没有得到正确的结果,因为列表太深了。
- 数组应该按照列表的大小动态处理可能在各个层面上都有所不同
- 每个级别的不同列表中的项目不应组合但是每个列表中的项目必须是
- 每个层的组合中只应包含一个列表
List=包含一个或多个字符串的列表Level=内有多个或一个列表的列表
输入示例代码:
[
[
["8F10"], ["8F12"], ["8F11"]
],
[
["8F10"], ["8F12"], ["8F11"]
],
[
["8F10"], ["8F12"], ["8F11"]
],
[
["FW03", "8F10"], ["FW03", "8F12"], ["FW03", "8F11"]
],
[
["8F12"], ["8F10"], ["8F11"]
],
[
["8F10", "KE04"], ["8F11", "KE04"], ["8F12", "KE04"]
],
[
["8F11"], ["8F12"], ["8F10"]
],
[
["8F10"], ["8F11"], ["8F12"]
],
[
["8F10"], ["8F11"], ["8F12"]
],
[
["9T03", "8F10"], ["9T03", "8F11"], ["9T03", "8F12"]
]
]
编辑:
预期的结果可以是元组列表,每个排列(组合(类似于itertools.termutations.
预期结果示例(一个元组(:
[
(["8F10"], ["8F10"], ["8F10"], ["FW03"], ["8F10"], ["8F12"], ["8F10"], ["KE04"], ["8F11"], ["8F10"], ["8F10"], ["9T03"], ["8F10"]),
(["8F10"], ["8F12"], ["8F10"], ["FW03"], ["8F10"], ["8F12"], ["8F10"], ["KE04"], ["8F11"], ["8F10"], ["8F10"], ["9T03"], ["8F10"]),
...
]
输入和输出可以调整(如果是列表、元组、字典等(,但重要的任务是获得所有可能的排列/组合。
分组不能被调整,例如["FW03","8F10"]不能被分割,因为它们彼此依赖。
假设您的输入名称为data
,那么下面将在可能的组合上创建一个迭代器:
it = (tuple(itertools.chain(*x)) for x in itertools.product(*data))