记一次简单的python优化,从一个数组中去除另一个数组中存在的元素

接到一个需求,一个250w的字符串构成的数组s1,一个大概100w个字符串构成的数组s2,需要从A中去掉B中出现过的。想了想这不是很简单吗,花了不到半分钟写出第一份代码:# 读文件部分省略for i in s2: if i in s1: s1.remove(i)结果一跑不得了,半个小时以后一点动静都没有,ctrl+c,趴在地上想了一下,优化起来也很简单:实际操作只有两步,分别拿出来试一下时间:def isin(i): start = time....
摘要由CSDN通过智能技术生成

接到一个需求,一个250w的字符串构成的数组s1,一个大概100w个字符串构成的数组s2,需要从A中去掉B中出现过的。

想了想这不是很简单吗,花了不到半分钟写出第一份代码:

# 读文件部分省略
for i in s2:
    if i in s1:
        s1.remove(i)

 

结果一跑不得了,半个小时以后一点动静都没有,ctrl+c,趴在地上想了一下,优化起来也很简单:

实际操作只有两步,分别拿出来试一下时间:

def isin(i):
    start = time.time()
    print(s2[i] in s1)
    now = time.time()
    print(now - time)

True
0.05784010887145996
def remove_s(i):
    start = time.time()
    s1.remove(s2[i])
    now = time.time()
    print(now - time)

0.026719093322753906

确实很慢,首先考虑s1换成dict,hash table查找会快很多:

s1_dict = {x:1 for x in s1}

def isin_dict(i):
    start = time.time()
    print(s2[i] in s1_dict)
    now = time.time()
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值