首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效地匹配两个数组中的所有数字[Python]

问有效地匹配两个数组中的所有数字[Python]
EN

Stack Overflow用户
提问于 2016-09-11 23:19:05
回答 2查看 154关注 0票数 0

我希望匹配出现在两个数组(长度不相等)中的数字,如果匹配,则将它们输出到另一个数组。这些数字是浮点数。

目前,我有一个用Python编写的工作程序,但是当我在大型数据集上运行它时,速度会很慢。我所做的是两个嵌套的for循环。

第一个嵌套的for循环运行array1并检查数组1中是否有来自array2的任何数字。如果匹配,我将其写入一个名为arrayMatch1的数组。

然后我检查array2,看看是否与arrayMatch1匹配。并将最终结果输出到arrayFinal。

arrayFinal将包含存在于array1、array2中的所有数字。

我的问题是:两个嵌套的for循环的复杂度为O(n^2)。这种方法适用于数组长度为25000的数据集,但如果数组长度更长,则会显着减慢。我怎样才能让它更有效率呢?数字是浮点数,并且始终采用此格式的######.###

我想要加速我的程序,但仍然使用Python,因为它很简单。有没有更好的方法在两个数组之间找到匹配?

EN

回答 2

Stack Overflow用户

发布于 2016-09-11 23:24:40

为什么不直接找到两个列表的交集呢?

代码语言:javascript
复制
a = [1,2,3,4.3,5.7,9,11,15]
b = [4.3,5.7,6.3,7.9,8.1]

def intersect(a, b):
    return list(set(a) & set(b))

print intersect(a, b)

输出:

5.7、4.3

从this question.获取

票数 1
EN

Stack Overflow用户

发布于 2016-09-11 23:27:15

所以你基本上要做的就是找到2列表的交集(逻辑上正确的项)。

首先,你需要消除列表本身的重复项,set是一个很好的方法,然后你可以直接&这些列表,你就可以开始工作了。

代码语言:javascript
复制
a = [23.3213,23.123,43.213,12.234] #List First
b = [12.234,23.345,34.224] #List Second
def intersect(a, b):
    return list(set(a) & set(b))

print intersect(a, b)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39437603

复制
相关文章

相似问题

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