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
"""

分析例題的:python

len()函數:

       首先是len()函數的複雜度是O(1)app

       緣由在於 在創造列表的同時默認在頭的位置設置了 len的變量,dom

       當元素個數發生改變的時候,自動會改變。函數

set()

       集合set後綴函數 :  .add(  )code

       若是使用  not in 至關於 逐個比較,很是慢,也至關於跑一遍列表。element

       若是使用set,系統默認爲 元素 不重複,效率高。class