Ich bin neu in Python und kann den Unterschied zwischen find und index nicht ganz verstehen.
>>> line
'hi, this is ABC oh my god!!'
>>> line.find("o")
16
>>> line.index("o")
16
Sie geben immer das gleiche Ergebnis zurück. Vielen Dank!!
python
string
python-2.7
SohamC
quelle
quelle
index
Dokumentation, die ich in der Antwort verlinkt habe: Wie find (), aber ValueError auslösen, wenn der Teilstring nicht gefunden wird.index
, zurückzukehren-1
undfind
zurückzukehren,ValueError
fallssub
es nicht gefunden wird.Außerdem ist find nur für Zeichenfolgen verfügbar, wobei als Index für Listen, Tupel und Zeichenfolgen verfügbar ist
>>> somelist ['Ok', "let's", 'try', 'this', 'out'] >>> type(somelist) <class 'list'> >>> somelist.index("try") 2 >>> somelist.find("try") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'list' object has no attribute 'find' >>> sometuple ('Ok', "let's", 'try', 'this', 'out') >>> type(sometuple) <class 'tuple'> >>> sometuple.index("try") 2 >>> sometuple.find("try") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'tuple' object has no attribute 'find' >>> somelist2 "Ok let's try this" >>> type(somelist2) <class 'str'> >>> somelist2.index("try") 9 >>> somelist2.find("try") 9 >>> somelist2.find("t") 5 >>> somelist2.index("t") 5
quelle
@falsetru lieferte eine Erklärung für den Unterschied zwischen Funktionen, ich habe einen Leistungstest zwischen ihnen durchgeführt.
"""Performance tests of 'find' and 'index' functions. Results: using_index t = 0.0259 sec using_index t = 0.0290 sec using_index t = 0.6851 sec using_find t = 0.0301 sec using_find t = 0.0282 sec using_find t = 0.6875 sec Summary: Both (find and index) functions have the same performance. """ def using_index(text: str, find: str) -> str: """Returns index position if found otherwise raises ValueError.""" return text.index(find) def using_find(text: str, find: str) -> str: """Returns index position if found otherwise -1.""" return text.find(find) if __name__ == "__main__": from timeit import timeit texts = [ "short text to search" * 10, "long text to search" * 10000, "long_text_with_find_at_the_end" * 10000 + " to long", ] for f in [using_index, using_find]: for text in texts: t = timeit(stmt="f(text, ' ')", number=10000, globals=globals()) print(f"{f.__name__} {t = :.4f} sec") print()
quelle