Python实验室-元组与列表效率问题

元组的访问速度比列表要快一些,下面我们通过实验一起来看看

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("用元组遍历快~")
总结:元组的访问速度比列表要快一些,如果定义了一系列常量值,并且主要用途仅仅是对其进行遍历而不需要进行任何修改,建议使用元组而不使用列表

Python实验室-元组与列表效率问题_第1张图片

你可能感兴趣的:(Python实验室,列表,python,机器学习,大数据)