2017-05-20 1 views
1

Ich arbeite an einer Python-Aufgabe und ich bin hier fest.Zählen der Anzahl der Teilstrings in einer Zeichenfolge

Anscheinend muss ich einen Code schreiben, der die Nummer eines bestimmten Teilstrings innerhalb einer Zeichenfolge zählt.

Ich dachte, ich habe es richtig gemacht, dann stecke ich hier fest.

def count(substr,theStr): 
    # your code here 
    num = 0 
    i = 0 
    while substr in theStr[i:]: 
     i = i + theStr.find(substr)+1 
     num = num + 1 

    return num 

substr = 'is' 
theStr = 'mississipi' 
print(count(substr,theStr)) 

wenn ich das laufen, erwarte ich als Ergebnis zu bekommen, besser gesagt, ich ...

See, andere Beispiele wie ana und banana funktioniert gut, aber In diesem speziellen Beispiel wird weiterhin der Fehler gemacht. Ich weiß nicht, was ich hier falsch gemacht habe.

Würdest du mir bitte helfen.

Antwort

0

In Ihrem Code

while substr in theStr[i:]: 

Fortschritte korrekt über den Zielstring theStr jedoch die

i = i + theStr.find(substr)+1 

von Anfang an von theStr suchen hält.

Die str.find Methode akzeptiert optional Start und Ende Argumente um die Suche zu begrenzen:

str.find(sub[, start[, end]])

Return den niedrigsten Index in der Zeichenfolge in dem Teilzeichen sub innerhalb der gefunden wird, Scheibe s[start:end]. Optionale Argumente Start und Ende werden als Slice-Notation interpretiert.Gibt -1 zurück, wenn nicht gefunden wurde.

Wir brauchen nicht wirklich in hier verwenden: Wir können nur prüfen, ob find nicht zurückgibt -1. Es ist ein wenig verschwenderisch, eine in Suche durchzuführen, wenn wir dann die Suche mit find wiederholen müssen, um den Index der Teilzeichenfolge zu erhalten.

Ich nehme an, dass Sie überlappende Übereinstimmungen finden möchten, da die str.count-Methode nicht überlappende Übereinstimmungen finden kann, und da es in C implementiert ist, ist es effizienter als die Implementierung selbst in Python.

def count(substr, theStr): 
    num = i = 0 
    while True: 
     j = theStr.find(substr, i) 
     if j == -1: 
      break 
     num += 1 
     i = j + 1 
    return num 

print(count('is', 'mississipi')) 
print(count('ana', 'bananana')) 

Ausgang

2 
3 

Der Kern dieses Codes ist

j = theStr.find(substr, i) 

i zu 0 initialisiert, so dass wir beginnen von Anfang theStr Suche und wegen i = j + 1 Nachfolgende Suchvorgänge beginnen mit der Suche nach dem Index, der auf die zuletzt gefundene Übereinstimmung folgt.

0

Der Code Änderung, die Sie brauchen, ist -

i = i + theStr[i:].find(substr)+ 1 

statt

i = i + theStr.find(substr)+ 1 

In Ihrem Code der Teil immer bis i erreicht Position 4 oder mehr gefunden wird. Aber während der Index des Teilkette zu finden, waren Sie das Original (ganz) Zeichenfolge verwendet, die wiederum gibt die Position als 1.

In Ihrem Beispiel von banana, nach der ersten Iteration i 2. wird also in der nächsten Iteration str[i:] wird nana. Und die Position der Teilzeichenfolge ana in dieser geschnittenen Zeichenfolge und die ursprüngliche Zeichenfolge ist 1. So wird der Fehler im Code nur unterdrückt und der Code scheint gut zu funktionieren.

Wenn Ihr Code nur für Lernzwecke ist, können Sie dies tun. Andernfalls können Sie die von Python bereitgestellten Funktionen (wie count()) verwenden, um die Aufgabe zu erledigen.

0
def count(substr,theStr): 
    num = 0 
    for i in range(len(theStr)): 
     if theStr[i:i+len(substr)] == substr: 
      num += 1 
    return num 

substr = 'is' 
theStr = 'mississipi' 
print(count(substr,theStr)) 
+3

** Aus Review-Warteschlange: ** Darf ich Sie bitten, bitte fügen Sie weitere Kontext um Ihre Antwort. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie in Ihrem Beitrag weitere Informationen hinzufügen können. –

Verwandte Themen