首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在python中筛选出等效的值列表?

如何在python中筛选出等效的值列表?
EN

Stack Overflow用户
提问于 2018-10-23 13:02:22
回答 2查看 111关注 0票数 2

当给出一个列表时,如:[[5, 2] [2, 5]]

我想将这个列表简化为:[[5, 2]][[2, 5]]

我已经尝试了以下几种方法:list(map(list, set(map(frozenset, parts_to_add))))

但是这种方法的问题是,它以集合的形式将我的列表转换成集合,虽然它可以过滤掉所有等价的列表,但它也会吃掉所有重复的值;当给定[[3, 3]]时,由于python中集合的性质,它返回[[3]]。还有别的办法吗?

如果能提供任何帮助,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-23 13:09:48

你可以这样做:

代码语言:javascript
运行
复制
data = [[5, 2], [2, 5], [3, 3]]

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

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

输出

代码语言:javascript
运行
复制
[[2, 5], [3, 3]]

正如@ for提到的,您可以使用一个冻结的计数器,例如:

代码语言:javascript
运行
复制
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)

输出

代码语言:javascript
运行
复制
[[2, 5], [3, 3]]

上述方法还使用dict来删除重复项,而不是使用set

票数 3
EN

Stack Overflow用户

发布于 2018-10-24 08:28:31

更直接的方法是,

代码语言:javascript
运行
复制
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]]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52949793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档