我有一对对列表,表示图中所有簇的边缘。实际上这个名单比这个要大。这只是一个例子。
([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]
答案 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]]
整体保留订单,以及每对中的订单(如果是欺骗,最后一对看起来将始终保留在结果中)。