gpt4 book ai didi

python - python len() 比计数更快吗

转载 作者:行者123 更新时间:2023-11-30 22:07:58 25 4
gpt4 key购买 nike

根据我的理解(但实际上没有测试),使用 len() 函数计算字符串的 len (例如)比简单地计算同一字符串中的字符数花费的时间更少,因为 len() 以某种方式进行了优化。 是这样吗?用简单的话来说它是如何工作的?

后续的实际问题可能是:“如果可能的话,就 O(code) 复杂度而言,使用 len(string) 等代码进行早期错误检测通常是一个好的做法”

谢谢

已更新。最初我没有提供任何代码,所以现在只是添加它,并希望如果我没有对其进行太多修改的话,这将具有一定的代表性。

import timeit


def len_test(arr):
return len(arr)


def manual_count(num):
ln = 0
i = 0
while i < num:
ln += 1
i += 1
return ln



for i in range(1000, 10000, 1000):
count = i
array = [_ for _ in range(i)]

t1 = timeit.timeit(stmt='len_test(array)', setup='from __main__ import len_test, array', number=count)
t2 = timeit.timeit(stmt='manual_count(count)', setup='from __main__ import manual_count, count', number=count)

print('i: {}, len:{:.8}, count: {:.8}'.format(i, t1, t2))

i: 1000, len:0.0001499, count: 0.12168087
i: 2000, len:0.000327363, count: 0.53221788
i: 3000, len:0.000449699, count: 1.167412
i: 4000, len:0.000595823, count: 2.1061223
i: 5000, len:0.000762714, count: 3.2617024
i: 6000, len:0.000937534, count: 4.8079927
i: 7000, len:0.001076862, count: 6.5171025
i: 8000, len:0.001222231, count: 9.3587468
i: 9000, len:0.001398561, count: 11.686714

最佳答案

我在实际情况下检查过,计数速度比 len() 快 2 倍或更多。

我读取两个 CSV 格式文本然后计算行数的代码是这样的:

import time
import csv

start_time = time.time()

psr = open('e_psr.txt')
cpr = open('e_cp.txt')

csv_psr = csv.reader(psr, delimiter=',')
csv_cp = csv.reader(cpr, delimiter=',')

csv_cp_copy = []
csv_psr_copy = []
r=0
e=0
for row in csv_psr:
csv_psr_copy.append(row)
for row in csv_cp:
csv_cp_copy.append(row)
e = len(csv_cp_copy)
r = len(csv_psr_copy)
psr.close()
cpr.close()

print(e,r)
print("\n--- %s seconds ---" % (time.time() - start_time))

当我在 for 循环 (e += 1) 中用一个简单的计数器替换 len() 时,结果发生了显着变化。

使用 len() 返回:

10000 10000

--- 0.13390278816223145 seconds ---

返回计数器:

10000 10000

--- 0.05642294883728027 seconds ---

关于python - python len() 比计数更快吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52327134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com