如何在python中过滤出等效的值列表?

时间:2018-10-23 13:02:23

标签: python set

在获得列表列表时,例如:[[5, 2] [2, 5]]
我想将此列表简化为:[[5, 2]][[2, 5]]

我已经尝试了以下方法:list(map(list, set(map(frozenset, parts_to_add))))
但是这种方法的问题是它把我的列表变成集合,并且在工作的同时-过滤掉所有等价的列表-还吃掉了我所有的重复值。由于python中集合的性质,当给定[[3, 3]]时,它返回[[3]]。还有另一种方法吗?
任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以这样做:

data = [[5, 2], [2, 5], [3, 3]]

result = set(tuple(e) for e in map(sorted, data))

print([list(e) for e in result])

输出

[[2, 5], [3, 3]]

如@soon所述,您可以使用冻结计数器,例如:

from collections import Counter

data = [[5, 2], [2, 5], [3, 3]]
result = [e for e in {frozenset(Counter(e)): e for e in data}.values()]
print(result)

输出

[[2, 5], [3, 3]]

上述方法还使用dict代替了set

答案 1 :(得分:2)

一种更直接的方法是

data = [[2, 5], [5, 2], [3, 6], [2, 5], [6, 3]]
result = []

for i in range(len(data)):
    data[i].sort()
    if data[i] not in result:
        result.append(data[i]) 



In [49]: result
Out[49]: [[2, 5], [3, 6]]