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

2024-04-26 11:59:58 发布

您现在位置:Python中文网/ 问答频道 /正文

当给定如下列表:[[5, 2] [2, 5]]
我想把这个列表缩减为:[[5, 2]][[2, 5]]

我已经试过了:list(map(list, set(map(frozenset, parts_to_add))))
但是这个方法的问题是,它将我的列表转换为集合,并且在工作时-它过滤掉所有等价的列表-它还吃掉我的所有重复值;当给定[[3, 3]]时,它返回[[3]],这是由于python中集合的性质。还有别的办法吗?
任何帮助都将不胜感激。你知道吗


Tags: to方法addmap列表listparts等价
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]]

你可以做:

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。你知道吗

相关问题 更多 >