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