元组的访问速度比列表要快一些,下面我们通过实验一起来看看
import random
import time as t
- 这里导入了
random
模块,用来生成随机数字源 - 并导入了
time
模块,用来计时,并将 time 库化名为 t (化名又称别名)
list_1 = []
tuple_ = tuple(list_1)
- 创建一个空列表
- 并创建一个空的元组, 有小伙伴就问了,为什么小白不直接这样:
tuple_ = ()
,岂不是很方便,但是大家想一想,列表是什么类型的序列 ?当然是不可变序列。稍后小白会总结序列的分类。
# 生成随机数字源
for i in range(20000000):
r = random.randint(1, 545454446)
list_1.append(r)
- 为了让数据更明显,小白刻意将数字加大了
- 这里补充一点:random.randint() 的用法
官方文档说:
random.randint(a,b)
生成 [a,b] 之间的随机 整数 ,随机数可能等于b
- 在这里就是遍历 20000000 次,然后生成的随机数追加到
list_1
中。
# 列表 for 遍历
t1 = t.time() # 开始时间
sum1 = 0
for li in list_1:
sum1 += li
- 我们先用列表进行 for 遍历, 我们用 time 库的化名 t 来调用 time() 方法, 相当于按了秒表计时键,并将时间节点记为 t1
- 这里小白举了一个简单的例子:求累加和的操作
print(f'sum1 has done, it\'s :{sum1}')
print(f"The type of list_1 is {type(list_1)}")
t2 = t.time() # 结束时间
T1 = (t2 - t1)
print(f'通过列表遍历后,执行时间为:{T1}')
- 打印求和的结果,并查看 list_1 的类型
- 当遍历结束后,再次按下秒表的停止键,并将该时间节点记为 t2 .
- 计算第一次的遍历时间差 (t2 - t1) ,记为 T1 ,并打印 T1
# 元组 for 遍历
t3 = t.time() # 开始时间
sum2 = 0
for tu in tuple_:
sum2 += tu
print(f'sum2 has done, it\'s :{sum2}')
print(f"The type of tuple_ is {type(tuple_)}")
t4 = t.time() # 结束时间
T2 = (t4 - t3)
print(f'通过元组遍历后,执行时间为:{T2}')
- 同理,用元组进行遍历步骤还是一样的,小伙伴不懂得可以参照列表遍历鸭 ~
- 小白不放心,还是再理一理叭 ~
- 这次用元组进行 for 遍历, 同样用 time 库的化名 t 来调用 time() 方法, 相当于按了秒表计时键,这里将时间节点记为 t3
- 还是求累加和的操作
- 打印求和的结果,并查看 tuple_ 的类型
- 当遍历结束后,再次按下秒表的停止键,这里将该时间节点记为 t4 .
- 计算第一次的遍历时间差 (t4 - t3),记为 T2 ,并打印 T2
# 根据时间差,判断快慢
if (T2 - T1) > 0:
print("用列表遍历快~")
else:
print("用元组遍历快~")
- 最后,再过根据条件双分支结构,若总时间差 (T2 - T1) 大于 0, 说明元组用的时间多,意思就是元组慢;反之,元组快。
完整的源代码如下:
import random
import time as t
list_1 = []
tuple_ = tuple(list_1)
# 生成随机数字源
for i in range(200000000):
r = random.randint(1, 545454446)
list_1.append(r)
# 列表 for 遍历
t1 = t.time() # 开始时间
sum1 = 0
for li in list_1:
sum1 += li
print(f'sum1 has done, it\'s :{sum1}')
print(f"The type of list_1 is {type(list_1)}")
t2 = t.time() # 结束时间
T1 = (t2 - t1)
print(f'通过列表遍历后,执行时间为:{T1}')
print()
# 元组 for 遍历
t3 = t.time() # 开始时间
sum2 = 0
for tu in tuple_:
sum2 += tu
print(f'sum2 has done, it\'s :{sum2}')
print(f"The type of tuple_ is {type(tuple_)}")
t4 = t.time() # 结束时间
T2 = (t4 - t3)
print(f'通过元组遍历后,执行时间为:{T2}')
# 根据时间差,判断快慢
if (T2 - T1) > 0:
print("用列表遍历快~")
else:
print("用元组遍历快~")