使用python从一个列表中寻找不在另一个列表中的数据的方法

假设有以下两个数据集列表

a = list(range(1, 100000))
b = list(range(150000, 50000, -1))

要从a中找到不在b中的数据,常常会想直接遍历两个列表即可

a_alone = []

start = time.time()
for i in a:
    if i not in b:
        a_alone.append(i)
end = time.time()

print(end - start)  # 117s

可以看到效率是非常低下的,相当于O(n2)的时间复杂度

利用集合则能大幅提高效率

a_set = set(a)
b_set = set(b)

start = time.time()
# 求差集得到的是在a里但不在b里的数据集合,a独有
# 如果a,b不是空集合,a-b为空集合,说明a中的数据全部在b中
a_alone = a_set - b_set

end = time.time()

print(end - start)  # 0.003s

效率大幅提升,相当于O(n)的时间复杂度(不清楚python的set实现机制,该处根据java中hashSet实现机制进行的推测)

集合的一些其他操作

# 求并集
c_set = a_set | b_set

# 求交集,结果集如果为空,说明两个集合没有任何数据是相同的
d_set = a_set & b_set
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值