首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >怎样才能找到一组具有所有共同元素的列表呢?

怎样才能找到一组具有所有共同元素的列表呢?
EN

Stack Overflow用户
提问于 2021-04-19 08:38:33
回答 2查看 51关注 0票数 0

假设我有一个list a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]],因此我只想获得a=[[1,2],[2,3],[4,5]],因为其他列表中的所有元素都接近列表中的其他元素。我们如何在Python中做到这一点?set可以在某种程度上使用吗?

我尝试使用numpy的allclose函数,但是接下来我们必须比较列表a中的所有n(n-1)/2对,这显然是效率低下的。有没有一种更有效的毕达通方法来做到这一点?

编辑:我刚才在示例中使用了一些整数,输入通常是浮动的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-19 08:40:57

如果值是这样的(例如,看起来像浮点不准确的值,您可以将值舍入到您感兴趣的精度,那么使用set()将事情简化为唯一的元组:

代码语言:javascript
复制
>>> a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]]
>>> a_r = [tuple(round(v, 2) for v in pair) for pair in a]
[(1, 2), (1.0, 2.0), (2, 3), (4, 5), (4.0, 5.0)]
>>> set(a_r)
{(2, 3), (4, 5), (1, 2)}
票数 3
EN

Stack Overflow用户

发布于 2021-04-19 10:00:42

对于列表中的数据示例和预期的结果,由于可以使用Numpy,我建议使用dtype将其转换为整数并使用numpy.unique

所以,根据你的清单:

代码语言:javascript
复制
a=[[1,2],[1.00000001,2.000000001],[2,3],[4,5],[4.0000000002,5.0000006]]

你可以这样做:

代码语言:javascript
复制
import numpy as np

a_np = np.unique(np.array(a, dtype=np.uint), axis=0)

print(a_np)
# [[1 2]
#  [2 3]
#  [4 5]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67158658

复制
相关文章

相似问题

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