Ich frage mich, warum Python True zurückgibt, wenn ich überprüfe, ob die leere Zeichenkette in einer Zeichenkette ist und warum ihr Index Null ist.
Zum Beispiel:
'' in ''
= & gt; wahr ''.index('')
= & gt; 0 '' in 'notEmpty'
= & gt; wahr 'notEmpty'.index('')
= & gt; 0 Ich habe es bemerkt, als ich eine ROT13-Funktion geschrieben habe, und beim Testen habe ich festgestellt, dass, wenn ich eine leere Zeichenfolge anrufe, 'n'
( 'n'
ist index13 im Alphabet) zurückgibt.
Ein String S
ist ein Teilstring des Strings T
wenn und nur wenn ein Index i
existiert so dass T[i:i+len(S)] == S
. Wenn S
die leere Zeichenfolge ist, haben Sie T[i:i] = '' = S
, so dass alle Ergebnisse korrekt sind.
Beachten Sie auch, dass T.index('')
den Wert 0 zurückgibt, weil index
den ersten Index, in dem die Teilzeichenfolge angezeigt wird, und T[0:0] = ''
zurückgibt, so dass dies definitiv das richtige Ergebnis ist.
Zusammenfassend ist die leere Zeichenfolge eine Teilzeichenfolge jeder Zeichenfolge und alle diese Ergebnisse sind eine direkte Folge davon.
Beachten Sie auch, dass dies für Strings charakteristisch ist, da Strings Sequenzen von Zeichen sind, die ihrerseits Strings der Länge eins sind. Für andere Arten von Sequenzen (wie list
s oder tuple
s) erhalten Sie nicht die gleichen Ergebnisse:
Das liegt daran, dass list
und tuple
nur nach Mitgliedern suchen und nicht nach Unter list
s oder Unter tuple
s, weil ihre Elemente beliebigen Typs sein können.
Stellen Sie sich den Fall ((1,2),1,2).index((1,2))
vor. Sollte index
nach "Sub-Tupeln" suchen (und somit 1 zurückgeben), nach Mitgliedern (und somit 0 zurückgeben) oder eine hässliche Mischung machen (z. B. zuerst nach Unter-Tupeln und dann nach Mitgliedern suchen)? In Python wurde entschieden, nur nach Mitgliedern zu suchen, da es einfacher ist und es normalerweise das ist, was Sie wollen. Wenn nur nach Unter-Tupeln gesucht wird, ergeben sich im allgemeinen Fall wirklich seltsame Ergebnisse, und das Ausführen von "Mischungen" würde oft zu unvorhersehbaren Ergebnissen führen.
Eine andere Möglichkeit, es zu betrachten, ist, dass x in y
True
zurückgibt, wenn es möglich ist, zwei Zeichenfolgen s1
und s2
zu finden, so dass Folgendes gilt:
Wenn x
die leere Zeichenfolge ist, gibt es immer True
. Dies liegt daran, dass Sie s1 = ''
und s2 = y
auswählen können.
Natürlich funktioniert die tatsächliche Implementierung von in
nicht auf diese Weise, aber das Ergebnis ist das gleiche. Es führt nur zu einem effizienteren Ergebnis.
Nun, die Antwort ist wirklich einfach. Du suchst nach ""
was wirklich ist, ist überhaupt kein Charakter ....
und das erste Mal, dass es kein Zeichen in einer Zeichenkette gibt, steht gleich am Anfang ... bei [0]
es wird verwirrend, weil Sie denken, dass [0]
der Index des ERSTEN Zeichens ist. Das ist richtig, aber Sie müssen auch denken, dass in diesem Fall die Segmente zwischen den Zeichen auch etwas "Greifbares" sind und so ist natürlich nichts in etwas, es ist auch nichts. und wenn Sie Teilmengen einer Zeichenkette überprüfen würden, würden Sie sie überall dort finden, wo Sie sie ausgewählt haben, an der ersten möglichen Stelle.
Tags und Links python string python-2.7