python 比较 len()时间效率 和 set去重的威力

例2-1  生成不重复随机数的效率比较。

import random
import time
def RandomNumber1(number ,start , end):
    data=[]
    n=0
    while True:
        element=random.randint(start,end)
        if element not in data:
            data.append(element)
            n+=1
        if  n==number:
            break
    return data
def RandomNumber2(number ,start , end):
    data=[]
    while True :
        element =random.randint(start,end)
        if element not in data:
             data.append(element)
        if len(data)==number:
            break
    return data
def RandomNumber3(number ,start ,end):
    data = set()
    while True:
        data.add(random.randint(start,end))
        if len(data)==number:
            break
    return data
start =time.time()
for i in range(500):
    RandomNumber1(1000,1,10000)
print('time1 used = ',time.time()-start)

start =time.time()
for i in range(500):
    RandomNumber2(1000,1,10000)
print('time2 used = ',time.time()-start)

start =time.time()
for i in range(500):
    RandomNumber3(1000,1,10000)
print('time3 used = ',time.time()-start)
"""
    time1 used =  16.99942398071289
    time2 used =  17.33067297935486
    time3 used =  3.3096442222595215
"""

分析例题的:

len()函数:

       首先是len()函数的复杂度是O(1)

       原因在于 在创造列表的同时默认在头的位置设置了 len的变量,

       当元素个数发生改变的时候,自动会改变。

set()

       集合set后缀函数 :  .add(  )

       如果使用  not in 相当于 逐个比较,非常慢,也相当于跑一遍列表。

       如果使用set,系统默认为 元素 不重复,效率高。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值