Hoe krijg ik de positie van een karakter in Python?

Hoe kan ik de positie van een teken in een tekenreeks in python krijgen?


Antwoord 1, autoriteit 100%

Hier zijn twee tekenreeksmethoden voor, find() en index(). Het verschil tussen de twee is wat er gebeurt als de zoekreeks niet wordt gevonden. find() retourneert -1 en index() verhoogt ValueError.

Gebruik find()

>>> myString = 'Position of a character'
>>> myString.find('s')
2
>>> myString.find('x')
-1

Gebruik 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

Uit de Python-handleiding

string.find(s, sub[, start[, end]])
Retourneert de laagste index in s waar de substring sub zo wordt gevonden dat sub volledig is opgenomen in s[start:end]. Retourneer -1 bij een fout. Standaardwaarden voor start en end en interpretatie van negatieve waarden is hetzelfde als voor segmenten.

En:

string.index(s, sub[, start[, end]])
Like find() maar verhoog ValueError wanneer de substring niet wordt gevonden.


Antwoord 2, autoriteit 20%

Voor de volledigheid: als u alle posities van een teken in een tekenreeks moet vinden, kunt u het volgende doen:

s = 'shak#spea#e'
c = '#'
print([pos for pos, char in enumerate(s) if char == c])

die zal afdrukken: [4, 9]


Antwoord 3, autoriteit 7%

>>> s="mystring"
>>> s.index("r")
4
>>> s.find("r")
4

“Langdradige” manier

>>> for i,c in enumerate(s):
...   if "r"==c: print i
...
4

om een ​​subtekenreeks te krijgen,

>>> s="mystring"
>>> s[4:10]
'ring'

Antwoord 4, autoriteit 2%

Voor de voltooiing, in het geval dat ik de extensie in een bestandsnaam wil vinden om het te controleren, moet ik de laatste ‘.’ vinden, in dit geval gebruik rfind:

path = 'toto.titi.tata..xls'
path.find('.')
4
path.rfind('.')
15

in mijn geval gebruik ik het volgende, wat werkt, ongeacht de volledige bestandsnaam:

filename_without_extension = complete_name[:complete_name.rfind('.')]

Antwoord 5, autoriteit 2%

Wat gebeurt er als de tekenreeks een dubbel teken bevat?
uit mijn ervaring met index() zag ik dat je voor duplicaat dezelfde index terugkrijgt.

Bijvoorbeeld:

s = 'abccde'
for c in s:
    print('%s, %d' % (c, s.index(c)))

zou terugkeren:

a, 0
b, 1
c, 2
c, 2
d, 4

In dat geval kun je zoiets doen:

for i, character in enumerate(my_string):
   # i is the position of the character in the string

Antwoord 6

string.find(character)  
string.index(character)  

Misschien wil je eens kijken in de documentatie om erachter te komen wat het verschil tussen de twee is.


Antwoord 7

Een teken kan meerdere keren voorkomen in een tekenreeks. In een string sentence is de positie van e bijvoorbeeld 1, 4, 7 (omdat indexering meestal vanaf nul begint). maar wat ik vind zijn beide functies find() en index() geeft de eerste positie van een teken terug. Dit kan dus als volgt worden opgelost:

def charposition(string, char):
    pos = [] #list to store positions for each 'char' in 'string'
    for n in range(len(string)):
        if string[n] == char:
            pos.append(n)
    return pos
s = "sentence"
print(charposition(s, 'e')) 
#Output: [1, 4, 7]

Antwoord 8

more_itertools.locate is een tool van derden die alle indicaties vindt van items die aan een voorwaarde voldoen.

Hier vinden we alle indexlocaties van de letter "i".

import more_itertools as mit
s = "supercalifragilisticexpialidocious"
list(mit.locate(s, lambda x: x == "i"))
# [8, 13, 15, 18, 23, 26, 30]

Antwoord 9

Als je de eerste match wilt vinden.

Python heeft een ingebouwde stringmethode die het werk doet: index().

string.index(value, start, end)

Waar:

  • Waarde: (vereist) de waarde waarnaar moet worden gezocht.
  • start: (Optioneel) Waar de zoekopdracht moet beginnen. Standaard is 0.
  • end: (Optioneel) Waar de zoekopdracht moet eindigen. Standaard is aan het einde van de tekenreeks.
def character_index():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"
    return string.index(match)
print(character_index())
> 15

Als je alle overeenkomsten wilt vinden.

Stel dat je alle indexen nodig hebt waar het teken match staat en niet alleen de eerste.

De pythonische manier zou zijn om enumerate() te gebruiken.

def character_indexes():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"
    indexes_of_match = []
    for index, character in enumerate(string):
        if character == match:
            indexes_of_match.append(index)
    return indexes_of_match
print(character_indexes())
# [15, 18, 42, 53]

Of nog beter met een lijstbegrip:

def character_indexes_comprehension():
    string = "Hello World! This is an example sentence with no meaning."
    match = "i"
    return [index for index, character in enumerate(string) if character == match]
print(character_indexes_comprehension())
# [15, 18, 42, 53]

Antwoord 10

Een oplossing met numpy voor snelle toegang tot alle indexen:

string_array = np.array(list(my_string))
char_indexes = np.where(string_array == 'C')

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes