[Python] Digest di Python, Volume 68, Numero 14
Riccardo Lemmi
riccardo a reflab.com
Ven 14 Ott 2011 09:38:58 CEST
Giuseppe Amato wrote:
> Interessa anche a me la cosa
>
> for i,c in enumerate(leggi):
>> if c=="a" : print i
>>
>> se stessi cercando una parola intera potrei fare:
>
> sstr = "apici"
> lsstr=len(sstr)
> for i,c in enumerate(leggi):
> if c=="a" and leggi[i:i+lsstr]==sstr : print i
>
Con il codice dovresti esprimere quello che vuoi fare: in questo caso secondo me
è fuorviante cercare una 'a' e poi la stringa:
sstr = "apici"
lsstr=len(sstr)
for i in range(len(leggi)):
if leggi[i:i+lsstr]==sstr: print i
> Ma mi conviene rispetto alle altre due proposte? Qual è la più veloce?
>
Secondo me la versione con le espressioni regolari è la migliore dal punto di
vista della comprensibilità, ma non ho fatto un controllo sulla velocità che
puoi fare tu usando timeit:
http://docs.python.org/library/timeit.html
>> sstr = "sa"
>> lsstr = len(sstr)
>>
>> pos = leggi.find(sstr)
>> print pos
>> while True:
>> new_pos = leggi.find(sstr, pos+lsstr)
>> if new_pos == -1:
>> break
>> else:
>> pos = new_pos
>> print pos
>>
>> oppure
>>
>> import re
>> expr = re.compile('sa')
>> for e in expr.finditer(leggi):
>> print e.start()
>>
>>
>>
>
--
Riccardo Lemmi
Maggiori informazioni sulla lista
Python