2701 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

27voto

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.

17voto

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'

13voto

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'

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.

11voto

Harsh Punkte 121
str1='There you are'
>>> str1[:]
'There you are'

>>> str1[1:]
'here you are'

#To print alternate characters skipping one element in between

>>> str1[::2]
'Teeyuae'

#To print last element of last two elements
>>> str1[:-2:-1]
'e'

#Similarly
>>> str1[:-2:-1]
'e'

#Using slice datatype

>>> str1='There you are'
>>> s1=slice(2,6)
>>> str1[s1]
'ere '

2 Stimmen

Mir gefällt Ihr Ansatz, die Optionen aufzulisten. Allerdings scheinen zwei Ihrer Optionen die gleichen zu sein?

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