在Python中删除列表中的可交换对

时间:2013-12-17 17:51:19

标签: python

我得到了如下列表:

list_1 = [[3, 0], [0, 3], [3, 4]]

我正在尝试过滤掉这里的交换元素。例如,[3,0][0,3]是相同的,我只需要保留其中一个。我尝试将其转换为一组,但没有帮助。我也试过迭代,但它造成了真正的开销。是否有任何Pythonic方法可以做到这一点?

感谢。

2 个答案:

答案 0 :(得分:4)

例如,您可以使用dict理解:

>>> {tuple(sorted(t)): t for t in list_1}.values()
[[0, 3], [3, 4]]

答案 1 :(得分:1)

您可以使用一组frozensets进行过滤。

如果订单无关紧要:

>>> map(list, set(frozenset(t) for t in list_1))
[[3, 4], [0, 3]]

保留订单:

list_1 = [[3, 0], [0, 3], [3, 4]]
seen = set()
filtered = []
for item in list_1:
    item_set = frozenset(item)
    if item_set not in seen:
        filtered.append(item)
        seen.add(item_set)

结果:

>>> filtered
[[3, 0], [3, 4]]