获取列表中的唯一对pyhon

时间:2018-06-08 23:28:30

标签: python list loops iterator

我有一对对列表,表示图中所有簇的边缘。实际上这个名单比这个要大。这只是一个例子。

([1, 2], [2, 1], [3, 5], [6, 3], [3, 6])

[1, 2]表示节点1和2之间的边缘,[2, 1]也是如此。 所以,我有一些困难要消除重复的对来计算集群的入度。

输出应该类似于[1, 2], [3, 5], [3, 6][2, 1], [3, 5], [6, 3]

2 个答案:

答案 0 :(得分:2)

如果对的顺序'元素无关紧要,然后使用sorted来规范化对。然后,使用set来消除重复项。

lst = [1, 2], [2, 1], [3, 5], [6, 3], [3, 6]

unique_pairs = {tuple(sorted(p)) for p in lst} # {(1, 2), (3, 6), (3, 5)}

答案 1 :(得分:1)

要在保留订单的同时删除重复项,您可以关闭一个有序的字典:

>>> from collections import OrderedDict
>>> data = [1, 2], [2, 1], [3, 5], [6, 3], [3, 6]
>>> list(OrderedDict((frozenset(edge), edge) for edge in data).values())
[[2, 1], [3, 5], [3, 6]]

整体保留订单,以及每对中的订单(如果是欺骗,最后一对看起来将始终保留在结果中)。