Wie kann ich die Position eines Zeichens innerhalb einer Zeichenfolge in Python ermitteln?
Hierfür gibt es zwei Zeichenfolgenmethoden: find()
und index()
. Der Unterschied zwischen den beiden besteht darin, was passiert, wenn die Suchzeichenfolge nicht gefunden wird. find()
kehrt zurück -1
und index()
erhöht ValueError
.
find()
>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1
index()
>>> myString = 'Position of a character'
>>> myString.index('s')
2
>>> myString.index('x')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
string.find(s, sub[, start[, end]])
Geben Sie den niedrigsten Index in s zurück, in dem sich das Teilzeichenfolgen- Sub befindet, sodass das Sub vollständig in enthalten ists[start:end]
. Return-1
on Failure. Die Standardeinstellungen für Start und Ende sowie die Interpretation negativer Werte sind dieselben wie für Slices.
Und:
string.index(s, sub[, start[, end]])
Wie,find()
aber erhöhen,ValueError
wenn der Teilstring nicht gefunden wird.
Der Vollständigkeit halber können Sie Folgendes tun, wenn Sie alle Positionen eines Zeichens in einer Zeichenfolge finden müssen:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
welches zurückkehren wird [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
wird die Koordinaten foo in ein Listenformat setzen. Ich finde das wirklich hilfreich"Langatmiger" Weg
Teilzeichenfolge zu bekommen,
quelle
str[from:to]
Wofrom
undto
sind IndizesNur zum Abschluss, für den Fall, dass ich die Erweiterung in einem Dateinamen finden möchte, um sie zu überprüfen, muss ich das letzte '.' Finden. In diesem Fall verwenden Sie rfind:
In meinem Fall verwende ich Folgendes, was unabhängig vom vollständigen Dateinamen funktioniert:
quelle
left = q.find("{"); right = q.rfind("}")
.Was passiert, wenn die Zeichenfolge ein doppeltes Zeichen enthält? Aus meiner Erfahrung mit habe
index()
ich gesehen, dass Sie für Duplikate den gleichen Index zurückerhalten.Zum Beispiel:
würde zurückkehren:
In diesem Fall können Sie so etwas tun:
quelle
enumerate
ist besser für so etwas.Vielleicht möchten Sie sich die Dokumentation ansehen , um herauszufinden, was der Unterschied zwischen den beiden ist.
quelle
Ein Zeichen kann in einer Zeichenfolge mehrmals vorkommen. Zum Beispiel in einer Zeichenkette
sentence
, Positione
ist1, 4, 7
(weil die Indizierung in der Regel von Null beginnt). Was ich aber finde, sind beide Funktionenfind()
und gebenindex()
die erste Position eines Zeichens zurück. Dies kann also folgendermaßen gelöst werden:quelle
more_itertools.locate
ist ein Tool eines Drittanbieters, das alle Angaben zu Elementen findet, die eine Bedingung erfüllen.Hier finden wir alle Indexpositionen des Briefes
"i"
.quelle
Eine Lösung mit numpy für den schnellen Zugriff auf alle Indizes:
quelle