Jak mogę uzyskać pozycję znaku w ciągu znaków w pythonie?
526
Są do tego dwie metody łańcuchowe find()
i index()
. Różnica między nimi polega na tym, co się dzieje, gdy nie można znaleźć szukanego ciągu. find()
zwraca -1
i index()
podnosi 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]])
Powrót najniższą indeks s gdzie podciąg sub znajduje się tak, że sub jest całkowicie zawarty ws[start:end]
. Zwrot-1
w przypadku awarii. Domyślne wartości początku i końca oraz interpretacja wartości ujemnych są takie same jak dla wycinków.
I:
string.index(s, sub[, start[, end]])
Podobnie jakfind()
podniesienie,ValueError
gdy nie znaleziono podciągu.
Dla kompletności, jeśli chcesz znaleźć wszystkie pozycje znaku w ciągu, możesz wykonać następujące czynności:
s = 'shak#spea#e'
c = '#'
print [pos for pos, char in enumerate(s) if char == c]
który wróci [4, 9]
print( [pos for pos, char in enumerate(s) if char == c])
foo = ( [pos for pos, char in enumerate(s) if char == c])
umieści współrzędne foo w formacie listy. Uważam to za bardzo pomocne„Long Winded” Way
uzyskać podciąg,
źródło
str[from:to]
gdziefrom
i gdzieto
są indeksyNa zakończenie, w przypadku, gdy chcę znaleźć rozszerzenie w nazwie pliku, aby to sprawdzić, muszę znaleźć ostatnie „.”, W tym przypadku użyj rfind:
w moim przypadku używam następującego, który działa niezależnie od pełnej nazwy pliku:
źródło
left = q.find("{"); right = q.rfind("}")
.Co dzieje się, gdy ciąg zawiera zduplikowany znak? z mojego doświadczenia z
index()
zobaczyłem, że za duplikat otrzymujesz ten sam indeks.Na przykład:
wróciłby:
W takim przypadku możesz zrobić coś takiego:
źródło
enumerate
jest lepszy do tego rodzaju rzeczy.Być może chciałbyś rzucić okiem na dokumentację, aby dowiedzieć się, jaka jest różnica między nimi.
źródło
Znak może pojawić się wiele razy w ciągu. Na przykład w łańcuchu
sentence
pozycjae
wynosi1, 4, 7
(ponieważ indeksowanie zwykle zaczyna się od zera). ale znalazłem obie funkcjefind()
iindex()
zwraca pierwszą pozycję znaku. Można to rozwiązać, wykonując następujące czynności:źródło
more_itertools.locate
to narzędzie innej firmy, które znajduje wszystkie oznaki pozycji spełniających warunek.Tutaj znajdujemy wszystkie lokalizacje indeksu litery
"i"
.źródło
Rozwiązanie z numpy zapewniające szybki dostęp do wszystkich indeksów:
źródło