如何过滤列表中的类似边?

时间:2017-12-01 18:32:11

标签: python-3.x list

我有一个列表,其中包含无向加权图的所有边。我进一步按其边权重的递增顺序对其进行排序。

列表如下

lis = [['B', 'C', 1], ['C', 'B', 1], ['B', 'A', 2], ['C', 'A', 2], ['A', 'C', 2], ['A', 'B', 2], ['D', 'C', 3], ['C', 'D', 3], ['B', 'D', 5], ['D', 'B', 5]]

现在在列表中,['B', 'C', 1], ['C', 'B', 1]表示同样的事情。这是边BC的权重为1,边CB的权重为1.同样,我们有边{列表中有{1}},AB等。

我如何只保留两个边缘中的一个而不是两个边缘,因为它们都意味着相同的东西。所以对于BA,我只想说['B', 'C', 1], ['C', 'B', 1]。我该怎么做?

我发现了一个类似的问题,但我不确定如何在我的情况下实现它。 Removing duplicate edges from graph in Python list

我尝试实施链接中发布的解决方案,但我没有工作

['B', 'C', 1]

1 个答案:

答案 0 :(得分:0)

只需对每个项目进行排序并删除重复项:

>>> lis = sorted([sorted(item) for item in lis])
>>> [lis[i][::-1] for i in range(len(lis)) if i == 0 or lis[i] != lis[i-1]]
[['C', 'B', 1], ['B', 'A', 2], ['C', 'A', 2], ['D', 'C', 3], ['D', 'B', 5]]