gpt4 book ai didi

Python合并两个具有所有可能排列的列表

转载 作者:IT老高 更新时间:2023-10-28 21:06:21 26 4
gpt4 key购买 nike

我正在尝试找出将两个列表合并为所有可能组合的最佳方法。所以,如果我从两个这样的列表开始:

list1 = [1, 2]
list2 = [3, 4]

结果列表将如下所示:

[[[1,3], [2,4]], [[1,4], [2,3]]]

也就是说,它基本上会生成一个列表列表,其中包含两者之间的所有潜在组合。

我一直在研究 itertools,我很确定它可以解决问题,但我无法想出一种方法让它以这种方式运行。我最接近的是:

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
print list(itertools.product(list1, list2))

生产者:

[(1, 5), (1, 6), (1, 7), (1, 8), (2, 5), (2, 6), (2, 7), (2, 8), (3, 5), (3, 6), (3, 7), (3, 8), (4, 5), (4, 6), (4, 7), (4, 8)]

所以它会处理每个列表中所有可能的项目组合,但不是所有可能的结果列表。我怎样才能做到这一点?

编辑:最终目标是能够单独处理每个列表以确定效率(我正在使用的实际数据更复杂)。因此,在上面的原始示例中,它的工作方式如下:

list1 = [1, 2]
list2 = [3, 4]

Get first merged list: [[1,3], [2, 4]]
Do stuff with this list
Get second merged list: [[1,4], [2, 3]]
Do stuff with this list

如果我得到上面描述的“列表列表”输出,那么我可以将它放入 for 循环并继续处理。其他形式的输出也可以,但它似乎是最简单的。

最佳答案

repeat 第一个列表,permutate 第二个和 zip 一起

>>> from itertools import permutations, repeat
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> list(list(zip(r, p)) for (r, p) in zip(repeat(a), permutations(b)))
[[(1, 4), (2, 5), (3, 6)],
[(1, 4), (2, 6), (3, 5)],
[(1, 5), (2, 4), (3, 6)],
[(1, 5), (2, 6), (3, 4)],
[(1, 6), (2, 4), (3, 5)],
[(1, 6), (2, 5), (3, 4)]]

编辑:正如 Peter Otten 所说,内部的 ziprepeat 是多余的。

[list(zip(a, p)) for p in permutations(b)]

关于Python合并两个具有所有可能排列的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32438350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com