2669 Stimmen

Wie erhalte ich eine Teilzeichenkette einer Zeichenfolge in Python?

Ich möchte eine neue Zeichenkette ab dem dritten Zeichen bis zum Ende der Zeichenkette erhalten, z. B. myString[2:end] . Wenn man den zweiten Teil weglässt, bedeutet das "bis zum Ende", und wenn man den ersten Teil weglässt, beginnt es dann von vorne?

3 Stimmen

Diese enthält eine klare Erklärung pythoncentral.io/cutting-and-slicing-strings-in-python

26voto

Gibt es eine Möglichkeit, eine Zeichenfolge in Python zu unterteilen, um eine neue Zeichenfolge aus dem 3.

Vielleicht wie myString[2:end] ?

Ja, das funktioniert tatsächlich, wenn Sie zuweisen, oder binden , der Name, end zu konstantem Singleton, None :

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

Die Slice-Notation hat 3 wichtige Argumente:

  • Start
  • stoppen
  • Schritt

Wenn sie nicht angegeben werden, sind die Standardwerte None - aber wir können sie explizit übergeben:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

Wenn das Verlassen des zweiten Teils "bis zum Ende" bedeutet, beginnt es dann von vorne, wenn man den ersten Teil verlässt?

Ja, zum Beispiel:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

Beachten Sie, dass wir Start in den Slice einbeziehen, aber nur bis und nicht einschließlich Stop gehen.

Wenn der Schritt None verwendet das Slice standardmäßig 1 für den Schritt. Wenn Sie einen Schritt mit einer negativen ganzen Zahl machen, ist Python schlau genug, um vom Ende zum Anfang zu gehen.

>>> myString[::-1]
'0987654321'

Ich erkläre die Slice-Notation sehr ausführlich in meine Antwort auf Explain slice notation Frage.

14voto

user18475123 Punkte 211
text = "StackOverflow"
#using python slicing, you can get different subsets of the above string

#reverse of the string
text[::-1] # 'wolfrevOkcatS' 

#fist five characters
text[:5] # Stack'

#last five characters
text[-5:] # 'rflow'

#3rd character to the fifth character
text[2:5] # 'rflow'

#characters at even positions
text[1::2] # 'tcOefo'

12voto

bouvard Punkte 3814

Bis auf das "Ende" haben Sie alles richtig verstanden. Das ist die sogenannte Slice-Notation. Dein Beispiel sollte lauten:

new_sub_string = myString[2:]

Wenn Sie den zweiten Parameter weglassen, ist dies implizit das Ende der Zeichenkette.

12voto

ostrokach Punkte 14576

Ich möchte der Diskussion zwei Punkte hinzufügen:

  1. Sie können verwenden None stattdessen auf ein leeres Feld, um "von Anfang an" oder "bis zum Ende" anzugeben:

    'abcde'[2:None] == 'abcde'[2:] == 'cde'

    Dies ist besonders hilfreich bei Funktionen, bei denen man kein Leerzeichen als Argument angeben kann:

    def substring(s, start, end):
        """Remove `start` characters from the beginning and `end` 
        characters from the end of string `s`.
    
        Examples
        --------
        >>> substring('abcde', 0, 3)
        'abc'
        >>> substring('abcde', 1, None)
        'bcde'
        """
        return s[start:end]
  2. Python hat slice Objekte:

    idx = slice(2, None)
    'abcde'[idx] == 'abcde'[2:] == 'cde'

10voto

CopyPasteIt Punkte 484

Wenn myString eine Kontonummer enthält, die bei Offset 6 beginnt und die Länge 9 hat, können Sie die Kontonummer auf diese Weise extrahieren: acct = myString[6:][:9] .

Wenn der Auftraggeber dies akzeptiert, könnte er es versuchsweise versuchen,

myString[2:][:999999]

Es funktioniert - es wird kein Fehler ausgelöst, und es tritt kein standardmäßiges "string padding" auf.

1 Stimmen

Ich denke, wenn Sie diese Methode anwenden wollen myString[offset:][:length] im Fall von OP können Sie einfach myString[offset:][:]

1 Stimmen

@VictorVal Die Antwort ist für diejenigen (wie mich), die Python als 2. (3., 4., ...) Programmiersprache gelernt haben und wollen einige vertraute "Syntax Haken", um die Sprache zu nähern. Experten in dieser Sprache werden meine Antwort wahrscheinlich als etwas albern ansehen.

0 Stimmen

Sollten Antworten wie diese zur Löschung markiert werden? Andere Antworten erklären eine ähnliche Lösung viel besser, und als ich diese hier sah, kratzte ich mich am Kopf und schlug einige Minuten lang in Python nach, bevor ich merkte, dass es genau diese Art von Antwort war.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X