Comment puis-je trouver la première occurrence d'une sous-chaîne dans une chaîne python?

123

Donc, si ma chaîne est "le mec est un mec cool".
J'aimerais trouver le premier index de 'mec':

mystring.findfirstindex('dude') # should return 4

Quelle est la commande python pour cela?
Merci.

Foreyez
la source

Réponses:

213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4
viande_mécanique
la source
20
Il revient -1si non trouvé
Christophe Roussy
et si je veux trouver le mot isde la phrase this is a cool dude? J'ai essayé la méthode find mais elle renvoie l'index 2 au lieu de 5. Comment puis-je y parvenir en utilisant find ()?
Regressor le
@Regressor: examinez les limites des expressions rationnelles et des mots.
mechanical_meat
28

Aperçu rapide: indexetfind

À côté de la findméthode, il y en a aussi index. findet les indexdeux donnent le même résultat: renvoyer la position de la première occurrence, mais si rien n'est trouvé indexlèvera un ValueErroralors findrenvoie -1. Speedwise, les deux ont les mêmes résultats de référence.

s.find(t)    #returns: -1, or index where t starts in s
s.index(t)   #returns: Same as find, but raises ValueError if t is not in s

Connaissances supplémentaires: rfindet rindex:

En général, find et index renvoient le plus petit index où la chaîne transmise commence et rfindet rindexretournent le plus grand index où il commence La plupart des algorithmes de recherche de chaîne recherchent de gauche à droite , donc les fonctions commençant par rindiquent que la recherche se déroule de droite à gauche .

Donc, dans le cas où la probabilité de l'élément que vous recherchez est proche de la fin que du début de la liste, rfindou rindexserait plus rapide.

s.rfind(t)   #returns: Same as find, but searched right to left
s.rindex(t)  #returns: Same as index, but searches right to left

Source: Python: Guide de démarrage rapide visuel, Toby Donaldson

user1767754
la source
si la chaîne est définie comme input_string = "this is a sentence"et si nous souhaitons trouver la première occurrence du mot is, cela fonctionnera-t-il? # first occurence of word in a sentence input_string = "this is a sentence" # return the index of the word matching_word = "is" input_string.find("is")
Regressor le
1

pour implémenter cela de manière algorithmique, en n'utilisant aucune fonction intégrée python. Cela peut être implémenté comme

def find_pos(string,word):

    for i in range(len(string) - len(word)+1):
        if string[i:i+len(word)] == word:
            return i
    return 'Not Found'

string = "the dude is a cool dude"
word = 'dude1'
print(find_pos(string,word))
# output 4
sahasrara62
la source
0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'
Benmadani Yazid
la source
6
Il semble que votre indentation est désactivée et que vous avez oublié de fermer vos guillemets. Une explication de votre code et pourquoi il résoudrait le problème est également utile; voir Comment répondre
camille le
désolé je l'édite ... mon code trouve la première occurrence d'une lettre dans une chaîne et renvoie sa place
Benmadani Yazid le
0

verse = "Si vous pouvez garder la tête quand tout à propos de vous \ n Perdez la leur et vous blâmez, \ nSi vous pouvez vous faire confiance lorsque tous les hommes doutent de vous, \ n Mais tenez également compte de leurs doutes; \ nSi vous le pouvez attendez et ne soyez pas fatigué d’attendre, \ n ou de vous faire mentir, de ne pas mentir, \ n d’être détesté, de ne pas céder à la haine, \ n Et pourtant, ne paraissez pas trop bien, ni ne parlez trop sage : "

enter code here

print(verse)
#1. What is the length of the string variable verse?
verse_length = len(verse)
print("The length of verse is: {}".format(verse_length))
#2. What is the index of the first occurrence of the word 'and' in verse?
index = verse.find("and")
print("The index of the word 'and' in verse is {}".format(index))
Demeurez Muhammed
la source
Bienvenue dans Stack Overflow. Vous répondez à une question ancienne et déjà répondue (réponse avec la coche verte) sans donner plus d'informations ou une meilleure explication. Donc, cela ne fait que reproduire la réponse acceptée . Jetez un œil à Comment rédiger une bonne réponse? . (Et pour plus de renseignements, jetez un œil à Comment gérer le nettoyage des réponses tardives en double de manière flagrante («surfer») sur des questions populaires ).
Ivo Mori