2013-08-26 13 views
10

Ich muss Muster in Zeichenfolge finden und gefunden, dass wir in oder finden können auch. Kann mir jemand vorschlagen, welcher besser/schneller an der Schnur ist? Ich muss den Index des Musters nicht finden, da find auch den Index des Musters zurückgeben kann.Finde vs in Betrieb in String Python

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

No 

Antwort

22

Verwenden Sie in, es ist schneller.

[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

Nicht nur ist es schneller. Es ist einfacher zu lesen: 'Wenn Teilzeichenfolge im Text: ...' ist einfach Englisch. – Bakuriu

6

Verwenden Sie unbedingt in. Es wurde für diesen Zweck gemacht, und es ist schneller.

str.find() sollte nicht für solche Aufgaben verwendet werden. Es wird verwendet, um den Index eines Zeichens in einem String zu finden, nicht um zu prüfen, ob ein Zeichen in einem String enthalten ist. Daher wird es viel langsamer sein.

Wenn Sie mit vielen größeren Daten arbeiten, dann wollen Sie wirklich in für maximale Effizienz mit zu:

$ 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 

Es ist auch viel besser lesbar.

Here's a documentation link about the keyword, und auch eine related question.

+0

Was "kann ein Problem sein"? Ihr Beispiel zeigt, dass es bei der Arbeit mit großen Strings nur geringe Leistungsunterschiede gibt. – flornquake

+0

@flornquake Ich habe geklärt – TerryA

+0

Mein Punkt war, dass der Unterschied (Percentage) scheint nicht so groß zu sein, wenn Sie mit großen Saiten arbeiten. Ich glaube, du hast das Flag "-s" vor der ersten Saite vergessen. – flornquake

1

in Verwendung wird schneller sein als bei der Verwendung nur Muster bereitstellt, während, wenn Sie finden es verwenden Sie Muster sowie seinen Index geben, so dass es etwas mehr Zeit bei der Berechnung des Index des Strings nehmen im Vergleich zu Wenn Sie jedoch nicht mit großen Datenmengen zu tun haben, dann ist es egal, was Sie verwenden.