例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,系统默认为 元素 不重复,效率高。
本文通过三种不同方法生成不重复随机数,对比了其效率。分别使用列表与集合进行数据存储,结果显示使用集合的方法效率最高,是处理大量不重复随机数生成任务的理想选择。
时间效率 和 set去重的威力&spm=1001.2101.3001.5002&articleId=82792682&d=1&t=3&u=cc63bb6936864d1189ca9e448d39f8a4)
661

被折叠的 条评论
为什么被折叠?



