url去重算法降低时间复杂度(python小技巧)

抓取url的过程中,一般去重的实现python都是利用把url存入列表list(时间复杂度On)去实现,根据时间复杂度,list会随着url数量的增加时间复杂度逐渐增加,故我们可以
利用字典(时间复杂度O1)进行去重从而减少时间复杂度,不会因为url的大量增
加而时间复杂度进行增加。


利用list进行去重url的形式

urls = []
#我们用for循环抓取url,相当于采集了url链接
for i in xrange(10000):
    url = "http://www.baidu.com/test.php?id=a&testid={i}".format(i=i)
    #一般利用list进行的去重
    if url not in urls:
        urls.append(url)#随着url增加时间复杂度逐渐增加On



下面我们用defaultdict去实现这个去重方法,下面代码的逻辑如果dict中不存在
url,那么就把url存储到字典中并赋值为1,如果存在不会执行代码。

urls = defaultdict(lambda:'none_value')
#我们用for循环抓取url,相当于采集了url链接
for i in xrange(10000):
    url = "http://www.baidu.com/test.php?id=a&testid={i}".format(i=i)
    #用dict进行的去重
    if urls[url] == "none_value":
        urls.update({url:"1"})
    #这个方法的好处就是即使大量的url去重或者查找时间复杂度始终是O1




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值