set与list性能对比

当集合中的数据量特别大时,要判断一个元素是否在该集合中,建议使用 set 而不是 list ,两种性能差异非常大。下面做一个测试:

from tqdm import tqdm
import random
import time

构造长度为 length 的数组

def construct_data(length):
    l = []
    for i in range(length):
        l.append(i)
    random.shuffle(l)
    return l, set(l)

测试 num

测试 list
length, num = int(1e6), int(1e4)
l, s = construct_data(length)
start_l = time.time()
for _ in tqdm(range(num)):
    r = random.randint(0, length-1)
    if r in l:
        pass
end_l = time.time()
print("test list time: {} seconds".format(end_l-start_l))
100%|██████████| 10000/10000 [02:52<00:00, 58.00it/s]

test list time: 172.42421102523804 seconds

测试 set
start_s = time.time()
for _ in tqdm(range(num)):
    r = random.randint(0, length-1)
    if r in s:
        pass
end_s = time.time()
print("test set time: {} seconds".format(end_s-start_s))
100%|██████████| 10000/10000 [00:00<00:00, 343595.45it/s]

test set time: 0.03251051902770996 seconds

可以看到,set 的速度实在比 list 快很多。毕竟 set 底层用hash散列实现,查找一个元素理论上只需 O(1) 时间,而 list 则是遍历,需要 O(n) 时间。数据量小的时候,两者看不出差距,数据量稍微大点,差距非常明显。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值