Python两种列表翻转方法的效率比较
编写一个Python程序,实现将一堆数字添加到一个初始为空的列表中,然后翻转该列表。
方法一:使用列表的reverse()方法实现:
count=10**5
nums1=[]
for i in range(count):
nums1.append(i)
nums1.reverse()
方法二:使用列表的insert()方法实现:
nums2=[]
for i in range(count):
nums2.insert(0,i)
在本人的计算机上的实验结果对比:
在本人的计算机上方法一所需要的时间是0.04543585712500385s,方法二所需要的时间是1.971661604352202s,方法二所需的时间大概是方法一的40倍。当我们将数据量增加10倍时,方法一所需时间是0.18828791136210368s,方法二所需时间是230.29416846730504s,方法二所需的时间大概是方法一的1220倍。数据量增加十倍,方法一所需时间大概增加五倍,而方法二所需时间大概增加115倍!随着数据规模的扩大,方法一和方法二的效率差距将越来越大。
附:计算Python程序执行时间的三种方法
方法一:
import datetime
starttime = datetime.datetime.now()
#long running
endtime = datetime.datetime.now()
print( (endtime - starttime).seconds)
方法二:
import time
start = time.time()
run_fun()
end = time.time()
print (end-start)
方法三:
import time
start = time.clock()
run_fun()
end = time.clock()
print (end-start)
方法一和方法二都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。
方法三算只计算了程序运行的CPU时间
#Python中翻转同一个列表的两种方法的比较
import time
#方法一:
#reverse()函数实现
starttime1=time.clock()
count=10**6
nums1=[]
for i in range(count):
nums1.append(i)
nums1.reverse()
endtime1=time.clock()
print(endtime1-starttime1)
#方法二:
#insert()函数实现
starttime2=time.clock()
nums2=[]
for i in range(count):
nums2.insert(0,i)
endtime2=time.clock()
print(endtime2-starttime2)