加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 优化大集合的交集

发布时间:2020-12-20 11:09:29 所属栏目:Python 来源:网络整理
导读:前提很简单:我有两个整数,a和b,我想找到我s.t. a i和b i都在给定的列表中.列表rs非常大(10e9项).我有以下代码: def getlist(a,b): a1 = set([i - a for i in rs if ia]) b1 = set([i-b for i in rs if ib]) tomp = list(a1.intersection(b1)) return tomp
前提很简单:我有两个整数,a和b,我想找到我s.t. a i和b i都在给定的列表中.列表rs非常大(10e9项).我有以下代码:

def getlist(a,b):
    a1 = set([i - a for i in rs if i>a])
    b1 = set([i-b for i in rs if i>b]) 

    tomp = list(a1.intersection(b1))
    return tomp

手头的问题是首先预先计算a1和b1,这会产生内存问题.我能以某种方式优化我的代码吗?关于该方法的一般评论也是受欢迎的.

输入示例:

rs = [4,9,16]
a = 3
b = 8

预期产量:

getlist(3,8) = [1]

解决方法

如果rs已经是一个集合,这会更快:

def getlist(a,b):
    return [i - a for i in rs if i > a and b + (i - a) in rs]

如果不是,则必须先设置该设置(否则上述算法将非常慢)并且性能与以前基本相同:

def getlist(a,b):
    rs_set = set(rs)
    return [i - a for i in rs_set if i > a and b + (i - a) in rs_set]

但是,如果要对不同的a和b值使用相同的函数多次但是相同的rs,则可以将rs转换为一次,并且每次都重复使用它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读