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,系统默认为 元素 不重复,效率高。

猜你喜欢

转载自blog.csdn.net/Z_sea/article/details/82792682