我有一个配对列表:
[0, 1], [0, 4], [1, 0], [1, 4], [4, 0], [4, 1]
我想删除所有重复的地方
[a,b] == [b,a]
所以我们最终只有
[0, 1], [0, 4], [1, 4]
我可以对反向对进行内部和外部循环检查,如果不是这种情况,则附加到一个列表中,但我确信有一种更 Pythonic 的方式来实现相同的结果。
最佳答案
如果需要保留列表中元素的顺序的话,可以使用sorted
map
的函数和集合理解像这样:
lst = [0, 1], [0, 4], [1, 0], [1, 4], [4, 0], [4, 1]
data = {tuple(item) for item in map(sorted, lst)}
# {(0, 1), (0, 4), (1, 4)}
或者干脆没有像这样的map
:
data = {tuple(sorted(item)) for item in lst}
另一种方法是使用 frozenset
,如图所示 here但是请注意,这仅在您的列表中有不同元素时才有效。因为像 set
一样,frozenset
总是包含唯一值。因此,您最终会在子列表中获得唯一值(丢失数据),这可能不是您想要的。
要输出一个列表,您总是可以使用 list(map(list, result))
,其中 result 是一组元组,仅在 Python-3.0 或更高版本中。
关于删除列表中反向重复项的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41164630/