c++中的vector的size()函数在多次调用时比较耗时,闲来无事,做个小实验测试一下python中len()函数的耗时
import time
N = 100000000
idx = 0
nums = ['0' for _ in range(N)]
idx = 0
time1 = time.time()
while idx < len(nums):
idx += 1
time2 = time.time()
print(time2 - time1)
"""
输出:13.739784240722656
"""
idx = 0
time1 = time.time()
while idx < N:
idx += 1
time2 = time.time()
print(time2 - time1)
"""
输出:8.432595014572144
"""
idx = 0
time1 = time.time()
for _ in range(len(nums)):
idx += 1
time2 = time.time()
print(time2 - time1)
"""
输出:8.185671329498291
"""
idx = 0
time1 = time.time()
for _ in range(len(nums)):
idx += 1
time2 = time.time()
print(time2 - time1)
"""
输出:8.589096546173096
"""
可以看到,while循环中和for循环的结果差别较大:
while循环中每循环一次都会调用一次len()函数,循环1亿次,大概比不调用len()的情况下多耗时70%,尽管说len()的复杂度是O(1),但是多次调用仍然耗时较大。
for循环中两次的结果差别不大,原因应该是for循环只会在调用len()一次,调用生成一个class ‘range’之后之后每次循环都不会再调用了。