length - python substring in string




Gibt es eine Möglichkeit, eine Zeichenfolge in Python zu unterteilen? (7)

Gibt es eine Möglichkeit, eine Zeichenkette in Python zu unterteilen, um eine neue Zeichenkette vom 3. Zeichen bis zum Ende der Zeichenkette zu erhalten?

Vielleicht wie myString[2:end] ?

Ja, das funktioniert tatsächlich, wenn Sie den Namen, end , dem Constant Singleton, None zuweisen oder bind :

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

Slice Notation hat 3 wichtige Argumente:

  • Anfang
  • halt
  • Schritt

Ihre Standardwerte, wenn sie nicht angegeben werden, sind 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, wenn Sie den ersten Teil verlassen, beginnt es von Anfang an?

Ja, zum Beispiel:

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

Beachten Sie, dass wir Start im Slice einschließen, aber wir gehen nur bis zu und nicht inklusive, stoppen.

Wenn Schritt None , verwendet das Segment standardmäßig 1 für den Schritt. Wenn Sie mit einer negativen Ganzzahl fortfahren, ist Python intelligent genug, um vom Ende zum Anfang zu gehen.

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

Ich erkläre Slice-Notation sehr detailliert in meiner Antwort auf Slice-Notation erklären Frage.

Gibt es eine Möglichkeit, eine Zeichenkette in Python zu unterteilen, um eine neue Zeichenkette vom 3. Zeichen bis zum Ende der Zeichenkette zu erhalten?

Vielleicht wie myString[2:end] ?

Wenn das Verlassen des zweiten Teils "bis zum Ende" bedeutet, wenn Sie den ersten Teil verlassen, beginnt es von Anfang an?


Du hast es genau dort bis auf "Ende". Es heißt Slice-Notation. Ihr Beispiel sollte lesen.

new_sub_string = myString[2:]

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


Ein Beispiel scheint hier zu fehlen: volle (flache) Kopie.

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>> 

Dies ist ein gängiges Idiom zum Erstellen einer Kopie von Sequenztypen (nicht von internen Strings). [:] Shallow kopiert eine Liste, siehe python-list-slice-used-for-no-obvious-reason .


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

  1. Sie können None stattdessen auf einem leeren Platz verwenden, um "von Anfang an" oder "bis zum Ende" anzugeben:

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

    Dies ist besonders hilfreich bei Funktionen, bei denen Sie keinen leeren Platz als Argument angeben können:

    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'
    

Nur der Vollständigkeit halber, da niemand es erwähnt hat. Der dritte Parameter zu einem Array-Slice ist ein Schritt. So ist das Umkehren einer Zeichenfolge so einfach wie:

some_string[::-1]

Oder alternative Charaktere wählen wäre:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

Die Fähigkeit, vorwärts und rückwärts durch den String zu gehen, behält die Konsistenz bei, um Slice von Anfang oder Ende anordnen zu können.


Substr () normal (zB PHP, Perl) funktioniert so:

s = Substr(s, beginning, LENGTH)

Also die Parameter beginnen und LÄNGE

Aber Pythons Verhalten ist anders, es erwartet einen Anfang und einen nach ENDE (!). Dies ist für Anfänger schwer zu erkennen. Also der richtige Ersatz für Substr (s, Anfang, LÄNGE) ist

s = s[ beginning : beginning + LENGTH]

>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python nennt dieses Konzept "Slicen" und es arbeitet an mehr als nur Strings. Hier finden Sie eine umfassende Einführung.





string