Wie man Strings in Python 3 indiziert und schneidet
Einführung
Der Python-String-Datentyp ist eine Sequenz, die aus einem oder mehreren einzelnen Zeichen besteht, die aus Buchstaben, Zahlen, Leerzeichen oder Symbolen bestehen können. Da ein String eine Sequenz ist, kann er auf die gleiche Weise wie andere sequenzbasierte Datentypen über Indizierung und Slicing zugegriffen werden.
Dieses Tutorial wird Sie durch den Zugriff auf Strings mittels Indizierung führen, das Slicing durch ihre Zeichenfolgen behandeln und einige Zähl- und Zeichenstandortmethoden durchgehen.
Voraussetzungen
Sie sollten Python 3 installiert und eine Programmierumgebung auf Ihrem Computer oder Server eingerichtet haben. Wenn Sie keine Programmierumgebung eingerichtet haben, können Sie auf die Installations- und Einrichtungsanleitungen für eine lokale Programmierumgebung oder für eine Programmierumgebung auf Ihrem Server verweisen, die für Ihr Betriebssystem (Ubuntu, CentOS, Debian usw.) geeignet ist.
Wie Zeichenfolgen indiziert werden
Wie der Listendatentyp, der Elemente hat, die einem Indexnummer entsprechen, entsprechen auch die Zeichen eines Strings einer Indexnummer, beginnend mit der Indexnummer 0.
Für den String Sammy Shark! sieht die Indexaufteilung folgendermaßen aus:
| S | eine | m | m | y | S | h | eine | r | k | ! | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Wie Sie sehen können, beginnt das erste S bei Index 0 und der String endet bei Index 11 mit dem !-Symbol.
Wir stellen auch fest, dass das Leerzeichen zwischen Sammy und Shark ebenfalls mit seiner eigenen Indexnummer übereinstimmt. In diesem Fall ist die Indexnummer, die mit dem Leerzeichen verbunden ist, 5.
Das Ausrufezeichen (!) hat auch eine zugehörige Indexnummer. Jedes andere Symbol oder Satzzeichen, wie *#$&.;?, ist ebenfalls ein Zeichen und hätte seine eigene Indexnummer.
Die Tatsache, dass jedes Zeichen in einem Python-String eine entsprechende Indexnummer hat, ermöglicht es uns, Strings auf die gleiche Weise wie andere sequenzielle Datentypen zuzugreifen und zu manipulieren.
Zugriff auf Zeichen durch positive Indexnummer
Durch Bezugnahme auf Indexnummern können wir ein Zeichen in einem String isolieren. Wir tun dies, indem wir die Indexnummern in eckige Klammern setzen. Lassen Sie uns einen String deklarieren, ihn ausgeben und die Indexnummer in eckigen Klammern aufrufen:
Info: Um dem Beispielcode in diesem Tutorial zu folgen, öffnen Sie eine Python-interaktive Shell auf Ihrem lokalen System, indem Sie den Befehl python3 ausführen. Dann können Sie die Beispiele kopieren, einfügen oder bearbeiten, indem Sie sie nach der >>> Eingabeaufforderung hinzufügen.
ss = "Sammy Shark!"
print(ss[4])
y
Wenn wir uns auf eine bestimmte Indexnummer eines Strings beziehen, gibt Python das Zeichen zurück, das sich an dieser Position befindet. Da der Buchstabe y an der Indexnummer 4 des Strings ss="Sammy Shark!" steht, erhalten wir beim Ausdrucken von ss[4] y als Ausgabe.
Indexnummern ermöglichen es uns, auf spezifische Zeichen innerhalb eines Strings zuzugreifen.
Zugriff auf Zeichen mit negativer Indexnummer
Wenn wir eine lange Zeichenkette haben und ein Element gegen Ende bestimmen möchten, können wir auch rückwärts vom Ende der Zeichenkette zählen, beginnend mit dem Indexnummer -1.
Für denselben String Sammy Shark! sieht die negative Indexaufteilung folgendermaßen aus:
| S | eine | m | m | y | S | h | eine | r | k | ! | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Durch die Verwendung von negativen Indexnummern können wir das Zeichen r ausgeben, indem wir uns auf seine Position im -3-Index beziehen, so:
print(ss[-3])
r
Die Verwendung von negativen Indexnummern kann vorteilhaft sein, um ein einzelnes Zeichen am Ende eines langen Strings zu isolieren.
Strings schneiden
Wir können auch eine Reihe von Zeichen aus der Zeichenkette herausnehmen. Angenommen, wir möchten nur das Wort Shark drucken. Das können wir tun, indem wir eine Slice erstellen, die eine Sequenz von Zeichen innerhalb einer ursprünglichen Zeichenkette ist. Mit Slices können wir mehrere Zeichenwerte aufrufen, indem wir einen Bereich von Indexnummern erstellen, die durch einen Doppelpunkt [x:y] getrennt sind:
print(ss[6:11])
Shark
Beim Erstellen einer Slice, wie in [6:11], ist die erste Indexnummer, wo die Slice beginnt (inklusive), und die zweite Indexnummer ist, wo die Slice endet (exklusive). Deshalb muss in unserem obigen Beispiel der Bereich die Indexnummer sein, die nach dem Ende des Strings auftreten würde.
Beim Slicing von Strings erstellen wir ein Substring, das im Wesentlichen ein String ist, der innerhalb eines anderen Strings existiert. Wenn wir ss[6:11] aufrufen, rufen wir das Substring Shark auf, das innerhalb des Strings Sammy Shark! existiert.
Wenn wir entweder Ende einer Zeichenkette einbeziehen möchten, können wir eine der Zahlen in der string[n:n]-Syntax weglassen. Wenn wir beispielsweise das erste Wort der Zeichenkette ss — „Sammy“ — drucken möchten, können wir dies tun, indem wir Folgendes eingeben:
print(ss[:5])
Sammy
Wir haben dies erreicht, indem wir die Indexnummer vor dem Doppelpunkt in der Slice-Syntax weggelassen und nur die Indexnummer nach dem Doppelpunkt angegeben haben, die auf das Ende des Teilstrings verweist.
Um einen Teilstring zu drucken, der in der Mitte eines Strings beginnt und bis zum Ende druckt, können wir dies tun, indem wir nur die Indexnummer vor dem Doppelpunkt einschließen, so:
print(ss[7:])
hark!
Indem man nur die Indexnummer vor dem Doppelpunkt einfügt und die zweite Indexnummer aus der Syntax weglässt, wird der Teilstring vom Zeichen der angegebenen Indexnummer bis zum Ende des Strings gehen.
Sie können auch negative Indexzahlen verwenden, um eine Zeichenkette zu schneiden. Wie wir zuvor besprochen haben, beginnen die negativen Indexzahlen einer Zeichenkette bei -1 und zählen von dort abwärts, bis wir den Anfang der Zeichenkette erreichen. Beim Verwenden negativer Indexzahlen beginnen wir mit der niedrigeren Zahl zuerst, da sie früher in der Zeichenkette vorkommt.
Lassen Sie uns zwei negative Indexnummern verwenden, um den String ss zu schneiden:
print(ss[-4:-1])
ark
Der Teilstring „ark“ wird aus dem String „Sammy Shark!“ ausgegeben, weil das Zeichen „a“ an der Stelle des Index -4 vorkommt und das Zeichen „k“ vor der Stelle des Index -1 vorkommt.
Festlegen des Schritts beim Schneiden von Zeichenfolgen
Das Slicing von Zeichenfolgen kann neben zwei Indizes auch einen dritten Parameter akzeptieren. Der dritte Parameter gibt den Schritt an, der angibt, wie viele Zeichen nach dem ersten Zeichen, das aus der Zeichenfolge abgerufen wird, vorwärts bewegt werden soll. Bisher haben wir den Schrittparameter weggelassen, und Python verwendet standardmäßig einen Schritt von 1, sodass jedes Zeichen zwischen zwei Indizes abgerufen wird.
Lassen Sie uns das obige Beispiel überprüfen, das die Teilzeichenfolg "Haifisch" ausgibt:
print(ss[6:11])
Shark
Wir können die gleichen Ergebnisse erzielen, indem wir einen dritten Parameter mit einem Schritt von 1 einfügen:
print(ss[6:11:1])
Shark
Ein Schritt von 1 wird also jedes Zeichen zwischen zwei Indexnummern eines Slices berücksichtigen. Wenn wir den Schrittparameter weglassen, wird Python standardmäßig 1 verwenden.
Wenn wir stattdessen die Schrittgröße erhöhen, werden wir sehen, dass Zeichen übersprungen werden:
print(ss[0:12:2])
SmySak
Das Festlegen des Schrittes von 2 als letzten Parameter in der Python-Syntax ss[0:12:2] überspringt jeden zweiten Charakter. Lassen Sie uns die hervorgehobenen Zeichen überprüfen:
Sammy Shark!
Beachten Sie, dass das Leerzeichen an Indexnummer 5 ebenfalls übersprungen wird, wenn ein Schritt von 2 angegeben ist.
Wenn wir eine größere Zahl für unseren Schrittparameter verwenden, haben wir einen erheblich kleineren Teilstring:
print(ss[0:12:4])
Sya
Die Angabe des Schrittes von 4 als letzten Parameter in der Python-Syntax ss[0:12:4] gibt nur jedes vierte Zeichen aus. Schauen wir uns erneut die hervorgehobenen Zeichen an:
Sammys Haifisch!
In diesem Beispiel wird das Leerzeichen ebenfalls übersprungen.
Da wir die gesamte Zeichenfolg ausdrucken, können wir die beiden Indexnummern weglassen und die beiden Doppelpunkte innerhalb der Syntax beibehalten, um dasselbe Ergebnis zu erzielen:
print(ss[::4])
Sya
Das Weglassen der beiden Indexnummern und das Beibehalten der Doppelpunkt wird den gesamten String im Bereich halten, während das Hinzufügen eines letzten Parameters für den Schritt die Anzahl der zu überspringenden Zeichen spezifiziert.
Zusätzlich können Sie einen negativen numerischen Wert für den Schritt angeben, den wir verwenden können, um den ursprünglichen String in umgekehrter Reihenfolge auszugeben, wenn wir den Schritt auf -1 setzen:
print(ss[::-1])
!krahS ymmaS
Die beiden Doppelpunkte ohne spezifizierte Parameter werden alle Zeichen aus der ursprünglichen Zeichenfolge einbeziehen, ein Schritt von 1 wird jedes Zeichen ohne Überspringen einbeziehen, und das Negieren dieses Schrittes wird die Reihenfolge der Zeichen umkehren.
Lass es uns noch einmal tun, aber mit einem Schritt von -2:
print(ss[::-2])
!rh ma
In diesem Beispiel, ss[::-2], arbeiten wir mit dem gesamten ursprünglichen String, da keine Indizes in den Parametern enthalten sind, und kehren den String durch den negativen Schritt um. Darüber hinaus überspringen wir mit einem Schritt von -2 jeden zweiten Buchstaben des umgekehrten Strings:
Krah Symma S
Das Leerzeichen wird in diesem Beispiel ausgegeben.
Indem Sie den dritten Parameter der Python-Slicing-Syntax angeben, geben Sie den Schritt der Teilzeichenfolge an, die Sie aus dem ursprünglichen String ziehen.
Zählmethoden
Während wir über die relevanten Indexnummern nachdenken, die den Zeichen innerhalb von Zeichenfolgen entsprechen, ist es sinnvoll, einige der Methoden durchzugehen, die Zeichenfolgen zählen oder Indexnummern zurückgeben. Dies kann nützlich sein, um die Anzahl der Zeichen zu begrenzen, die wir in einem Benutzereingabeformular akzeptieren möchten, oder um Zeichenfolgen zu vergleichen. Ähnlich wie andere sequenzielle Datentypen können Zeichenfolgen durch verschiedene Methoden gezählt werden.
Zuerst werden wir die len()-Methode betrachten, mit der die Länge eines beliebigen Datentyps ermittelt werden kann, der eine Folge ist, unabhängig davon, ob geordnet oder ungeordnet, einschließlich Zeichenfolgen, Listen, Tuplen und Wörterbüchern.
Lass uns die Länge des Strings ss ausdrucken:
print(len(ss))
12
Die Länge des Strings "Sammy Shark!" beträgt 12 Zeichen, einschließlich des Leerzeichens und des Ausrufezeichens.
Anstatt eine Variable zu verwenden, können wir auch einen String direkt in die len() Methode übergeben:
print(len("Let's print the length of this string."))
38
Die len()-Methode zählt die Gesamtzahl der Zeichen in einem String.
Wenn wir die Anzahl der Vorkommen eines bestimmten Zeichens oder einer Zeichenfolge in einem String zählen möchten, können wir dies mit der Methode str.count() tun. Lassen Sie uns mit unserem String ss="Sammy Shark!" arbeiten und die Anzahl der Vorkommen des Zeichens “a” zählen:
print(ss.count("a"))
2
Wir können nach einem anderen Charakter suchen:
print(ss.count("s"))
0
Obwohl der Buchstabe "S" in der Zeichenkette enthalten ist, ist es wichtig zu beachten, dass jedes Zeichen unterscheidlich groß- und kleingeschrieben wird. Wenn wir nach allen Buchstaben in einer Zeichenkette suchen möchten, unabhängig von der Schriftgröße, können wir die Methode str.lower() verwenden, um die Zeichenkette zuerst in Kleinbuchstaben umzuwandeln. Sie können mehr über diese Methode in "Eine Einführung in String-Methoden in Python 3" lesen.
Lass uns str.count() mit einer Folge von Zeichen versuchen:
likes = "Sammy likes to swim in the ocean, likes to spin up servers, and likes to smile."
print(likes.count("likes"))
3
In der Zeichenkette likes kommt die Zeichenfolge, die äquivalent zu "likes " ist, 3 Mal in der ursprünglichen Zeichenkette vor.
Wir können auch herausfinden, an welcher Stelle ein Zeichen oder eine Zeichenfolge in einem String vorkommt. Dies können wir mit der Methode str.find() tun, und sie gibt die Position des Zeichens basierend auf der Indexnummer zurück.
Wir können überprüfen, wo das erste „m“ in der Zeichenkette ss vorkommt:
print(ss.find("m"))
Ouput2
Das erste Zeichen „m“ tritt an der Indexposition 2 im String „Sammy Shark!“ auf. Wir können die Indexnummern der Zeichenkette ss oben überprüfen.
Lass uns überprüfen, wo die erste "likes" Zeichenfolge im String likes erscheint:
print(likes.find("likes"))
Ouput6
Die erste Instanz der Zeichenfolge „likes“ beginnt an der Indexnummer 6, wo sich das Zeichen l der Folge likes befindet.
Was ist, wenn wir sehen wollen, wo die zweite Sequenz von "Gefällt mir" beginnt? Das können wir tun, indem wir einen zweiten Parameter an die str.find()-Methode übergeben, der an einer bestimmten Indexnummer beginnt. Statt also am Anfang des Strings zu beginnen, lass uns nach der Indexnummer 9 beginnen:
print(likes.find("likes", 9))
34
In diesem zweiten Beispiel, das an der Indexnummer 9 beginnt, beginnt das erste Vorkommen der Zeichenfolge „likes“ an der Indexnummer 34.
Zusätzlich können wir ein Ende des Bereichs als dritten Parameter angeben. Wie beim Schneiden können wir dies tun, indem wir rückwärts mit einer negativen Indexnummer zählen:
print(likes.find("likes", 40, -6))
64
Dieses letzte Beispiel sucht die Position der Sequenz „likes“ zwischen den Indexzahlen 40 und -6. Da der letzte eingegebene Parameter eine negative Zahl ist, wird von Ende des ursprünglichen Strings gezählt.
Die String-Methoden len(), str.count() und str.find() können verwendet werden, um die Länge, die Anzahl der Zeichen oder Zeichenfolgen und die Indexpositionen von Zeichen oder Zeichenfolgen in Strings zu bestimmen.
Schlussfolgerung
Die Fähigkeit, spezifische Indexnummern von Strings oder einen bestimmten Ausschnitt eines Strings aufzurufen, gibt uns größere Flexibilität bei der Arbeit mit diesem Datentyp. Da Strings, wie Listen und Tupel, ein sequenzbasierter Datentyp sind, können sie durch Indizierung und Slicing zugegriffen werden.
Sie können mehr über das Formatieren von Strings und String-Methoden lesen, um weiterhin über Strings zu lernen.