gpt4 book ai didi

python - 从排列列表中获取所有唯一组合

转载 作者:行者123 更新时间:2023-11-28 21:50:48 26 4
gpt4 key购买 nike

TL/DR

给定 X = {(A,B),(B,C),(D,E),(B,A),(C,B)}(其中 X 是一个集合)

如何过滤显示唯一组合(而不是唯一排列)的子元组,使得 X 变为{(A,B),(B,C),(D,E))}

更长的形式

此处大多数组合/排列问题的逆问题。

我有一组元组(外元组),其中每个元组有2个元素,这两个元素也是元组(内元组),每个子元组有两个元素,都是整数。

例如,包含三个元素的集合可能看起来像

X = { ( (1,2),(2,3) ), ( (1,3),(1,2) ), ( (2,3),(1,2) ) }

虽然所有外部元组都是唯一的,但我想构建一个子集,其中包含一组不同的元组,其中两个内部元组的顺序无关紧要(即一组唯一组合)。在上面的示例中,这将减少为;

X = { ( (1,2),(2,3) ), ( (1,3),(1,2) )}

因为

( (1, 2),(2,3) ) and ( (2,3),(1,2) ) )

都是 (1, 2)(2,3) 的组合。

对此有明显的暴力/for 循环方法,但它们感觉不是很 Pythonic。

也许利用 itertoolsmap

最佳答案

您可以使用 map 在您的元素上应用 sorted 函数,然后使用集合理解来获取唯一元素:

>>> new={tuple(i) for i in map(sorted,X)}
>>> new
set([('B', 'C'), ('A', 'B'), ('D', 'E')])

但请注意,由于 sorted 将您的元素转换为列表,您需要将它们反转为 tuple,因为列表不可散列。

关于python - 从排列列表中获取所有唯一组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31430635/

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