让我们说我有两个列表列表和我的魔杖来构建它的各种排列。看看这两个清单:
l1 = [[0, 8], [4], [6, 7], [1], [3], [5], [2]]
l2 = [[4, 8], [0], [6, 7], [3], [1], [5], [2]]
这两个列表代表了我已经拥有的映射。所以我知道我的排列的一些部分,但不是所有部分。在我看来,只有四种可能的排列:
(4, 3, 2, 1, 0, 5, 6, 7, 8)
(8, 3, 2, 1, 0, 5, 7, 6, 4)
(4, 3, 2, 1, 0, 5, 7, 6, 8)
(8, 3, 2, 1, 0, 5, 6, 7, 4)
在考虑之后我有了以下想法。我将生成l1
(最后是一个元组)的所有四种可能性使l2
成为一个元组,做一个字典zip,命令该字典并将这四个dicts转换为元组列表。听起来合理吗?
我很难生成四个元组。这是我到目前为止所做的。
l1 = [[0, 8], [4], [6, 7], [1], [3], [5], [2]]
l2 = [[4, 8], [0], [6, 7], [3], [1], [5], [2]]
out = [()]
def get_permutations(lst):
for i in lst:
for perms in permutations(i):
out[0] = out[0] + perms
return out
print(get_permutations(l1))
打印[(0, 8, 8, 0, 4, 6, 7, 7, 6, 1, 3, 5, 2)]
当我到达列表中的条目时,如何生成另一个元组,其中可能有多个列表条目的排列?
我也知道print(list(itertools.product(*l1)))
几乎可以做我想要但不完全的事情。它产生[(0, 4, 6, 1, 3, 5, 2), (0, 4, 7, 1, 3, 5, 2), (8, 4, 6, 1, 3, 5, 2), (8, 4, 7, 1, 3, 5, 2)]
。也许有办法修改它。
这不是一个家庭作业问题 提供上下文:我正在构建一个程序来测试图同构。列表是节点的颜色类。对于这些颜色类,我想将图形的所有可能排列限制为几个,以使蛮力更快。
答案 0 :(得分:0)