gpt4 book ai didi

python - 在列表中查找元组的所有组合

转载 作者:行者123 更新时间:2023-12-05 02:26:57 33 4
gpt4 key购买 nike

我试图在长度为 2 的列表中找到元组内部项目的所有排列。元组相对于彼此的顺序无关紧要。

perm = [(3, 6), (6, 8), (4, 1), (7, 4), (5, 3),
(1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
(6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

上述列表的一个排列示例是:

perm = [(6, 3), (6, 8), (4, 1), (7, 4), (5, 3),
(1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
(6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

另一个示例排列是:

perm = [(6, 3), (8, 6), (1, 4), (4, 7), (3, 5),
(9, 1), (5, 2), (8, 4), (1, 5), (7, 3),
(9, 6), (2, 10), (10, 7), (2, 8), (10, 9)]

最后,排列列表的长度应该是 32768,因为每个元组要么交换要么不交换,并且 2^15 = 32768。我不关心元组之间的顺序,只有元组内项目的排列。

我已经尝试使用 itertools 置换、组合和乘积,但我一直无法获得想要的结果。

最佳答案

您可以使用产品:

from itertools import product

lst = [(3, 6), (6, 8), (4, 1), (7, 4), (5, 3),
(1, 9), (2, 5), (4, 8), (5, 1), (3, 7),
(6, 9), (10, 2), (7, 10), (8, 2), (9, 10)]

output = product(*([(x, y), (y, x)] for x, y in lst))

output = list(output) # if you want a list, rather than a generator

print(len(output))
# 32768

print(output[0])
# ((3, 6), (6, 8), (4, 1), (7, 4), (5, 3), (1, 9), (2, 5), (4, 8), (5, 1), (3, 7), (6, 9), (10, 2), (7, 10), (8, 2), (9, 10))
print(output[-1])
# ((6, 3), (8, 6), (1, 4), (4, 7), (3, 5), (9, 1), (5, 2), (8, 4), (1, 5), (7, 3), (9, 6), (2, 10), (10, 7), (2, 8), (10, 9))

关键是要这样写

output = product([(3,6), (6,3)], [(6,8), (8,6)], ..., [(9,10), (10,9)])

以一种通用的方式,以便任何输入列表都可以工作,这是通过生成器表达式和解包 (*) 完成的。

关于python - 在列表中查找元组的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73496251/

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