2013-08-26 10 views
10

Ho bisogno di trovare pattern in stringa e ho trovato che possiamo usare o trovare anche. Qualcuno potrebbe suggerirmi quale sarà migliore/veloce sulla corda. Non ho bisogno di trovare l'indice del pattern, in quanto find può anche restituire l'indice del pattern.find vs in operation in python stringa

temp = "5.9" 
temp_1 = "1:5.9" 
>>> temp.find(":") 
-1 
>>> if ":" not in temp: 
    print "No" 

No 

risposta

22

Utilizzare in, è più veloce.

[email protected]:~$ python -m timeit 'temp = "1:5.9";temp.find(":")' 
10000000 loops, best of 3: 0.139 usec per loop 
[email protected]:~$ python -m timeit 'temp = "1:5.9";":" in temp' 
10000000 loops, best of 3: 0.0412 usec per loop 
+3

Non solo è più veloce. È più facile da leggere: 'se la sottostringa nel testo: ...' è un semplice inglese. – Bakuriu

6

Utilizzare decisamente in. È stato creato per questo scopo ed è più veloce.

str.find() non deve essere utilizzato per attività come questa. È usato per trovare l'indice di un carattere in una stringa, non per verificare se un personaggio si trova in una stringa. Quindi, sarà molto più lento.

Se si lavora con i dati molto più grandi, allora si vuole veramente essere utilizzando in per la massima efficienza:

$ python -m timeit -s "temp = '1'*10000 + ':' " "temp.find(':') == -1" 
100000 loops, best of 3: 9.73 usec per loop 
$ python -m timeit -s "temp = '1'*10000 + ':' " "':' not in temp" 
100000 loops, best of 3: 9.44 usec per loop 

E 'anche molto più leggibile.

Here's a documentation link about the keyword e anche uno related question.

+0

Che "può essere un problema"? Il tuo esempio mostra che c'è poca differenza nelle prestazioni quando si lavora con stringhe di grandi dimensioni. – flornquake

+0

@flornquake Ho chiarito – TerryA

+0

Il mio punto era che la differenza (percenage) non sembra essere così grande quando si lavora con stringhe di grandi dimensioni. Penso che tu abbia dimenticato la bandiera '-s' prima della prima stringa. – flornquake

1

Utilizzando in sarà più veloce come l'utilizzo in fornisce unico modello, mentre se si utilizza trovarlo vi darà modello così come il suo indice in modo che ci vorrà un po 'di tempo in più nel calcolo dell'indice della stringa rispetto a in. Tuttavia, se non si tratta di dati di grandi dimensioni, allora è importante che cosa si usi.