empty_string in einigen_string - immer wahr? [Duplikat]

8

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.

    
Community 21.11.2012, 12:06
quelle

3 Antworten

6

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:

%Vor%

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.

    
Bakuriu 21.11.2012, 12:10
quelle
6

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:

%Vor%

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.

    
Mark Byers 21.11.2012 12:08
quelle
0

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.

    
Inbar Rose 21.11.2012 12:10
quelle

Tags und Links