生命之风的低语
Whispers in the Wind of Life.

为什么count()方法比for循环python更快

2025-09-04 14:43:16

@CodeMonkey已经给出了答案,但值得注意的是,您的第一个函数可以改进,使其运行速度快20%:

代码语言:javascript运行复制import time, random

def scoring1(seq):

score=0

for i in range(len(seq)):

if seq[i]=='0':

score+=1

return score

def scoring2(seq):

score=0

for x in seq:

score += (x =='0')

return score

def scoring3(seq):

score = 0

score = seq.count('0')

return score

def test(n):

seq = ''.join(random.choice(['0','1']) for i in range(n))

functions = [scoring1,scoring2,scoring3]

for i,f in enumerate(functions):

start = time.clock()

s = f(seq)

elapsed = time.clock() - start

print('scoring' + str(i+1) + ': ' + str(s) + ' computed in ' + str(elapsed) + ' seconds')

test(10**7) 典型产出:

代码语言:javascript运行复制scoring1: 5000742 computed in 0.9651326495293333 seconds

scoring2: 5000742 computed in 0.7998054195159483 seconds

scoring3: 5000742 computed in 0.03732172598339578 seconds前两种方法都被内置的count()吹走了。

故事的寓意:当你没有使用已经优化的内置方法时,你需要优化你自己的代码。