Otimizando o código python

def is_letter(character):
return character in
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

Percebi que essa função faria um loop de aZ, então devemos acelerar isso usando um conjunto!

Primeiro é lento?

In [5]: %timeit is_letter(';')
10000000 loops, best of 3: 155 ns per loop

Acho que não demorou 1 segundo para fazer ~ 10M em sua entrada de pior caso

Mas devemos ser capazes de acelerá-lo usando um conjunto (uma pesquisa de hash em vez de olhar para todas as 52 coisas)

def is_letter(character):
return character in
set
('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
In [7]: %timeit is_letter(';')
100000 loops, best of 3: 2.29 µs per loop

Ok, então isso é ~ 20x mais lento porque ele constrói um conjunto em cada loop.

vamos consertar isso

letters = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
def is_letter(character):
return character in letters
In [9]: %timeit is_letter(';')
10000000 loops, best of 3: 141 ns per loop

Isso é cerca de 10% mais rápido!

Pode ser fácil tropeçar ao tentar otimizar o código.

Também é fácil de obter resultados nada assombrosos.

Gravar para detectar bugs ou tornar as coisas mais lentas é uma possibilidade, certifique-se de criar o perfil das coisas em entradas semelhantes ao que você espera e testar seu código!

nota: você pode apenas usá-
character.isalpha()lo tem desempenho semelhante