Frage Gibt es eine Möglichkeit, eine Zeichenfolge in Python zu unterteilen?


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 so myString[2:end]?

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


1589
2018-03-19 17:29


Ursprung


Antworten:


>>> 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. Schau mal Hier für eine umfassende Einführung.


2409
2018-03-19 17:30



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.


305
2018-03-20 00:58



Substr () normalerweise (d. H. PHP und Perl) funktioniert folgendermaßen:

s = Substr(s, beginning, LENGTH)

So sind die Parameter beginning und LENGTH.

Aber Pythons Verhalten ist anders; es erwartet Anfang und eine 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]

91
2017-08-04 11:43



Ein üblicher Weg, dies zu erreichen, ist das String-Slicing. MyString[a:b] gibt Ihnen eine Teilzeichenfolge von Index a bis (b - 1)


45
2018-03-02 05:19



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 intern gespeicherten Strings). [:] Shallow kopiert eine Liste, siehe Python-Liste-Slice-verwendet-für-keinen-offensichtlichen-Grund.


17
2018-03-19 18:02



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 so 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'

Slice Notation hat 3 wichtige Argumente:

  • Anfang
  • halt
  • Schritt

Ihre Standardwerte sind nicht angegeben None - aber wir können sie explizit weitergeben:

>>> 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.

Wann Schritt ist NoneStandardmäßig verwendet das Slice 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 meine Antwort zu Scheibennotation erklären Frage. 


12
2018-06-23 21:53



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

new_sub_string = myString[2:]

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


7
2018-03-19 17:31



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

  1. Sie können verwenden None stattdessen auf ein leeres Feld, um "von Anfang" 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 Scheibe Objekte:

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

6
2017-08-31 04:28



Vielleicht habe ich es verpasst, aber ich konnte auf dieser Seite keine vollständige Antwort auf die ursprüngliche (n) Frage (n) finden, da die Variablen hier nicht weiter behandelt werden. Also musste ich weiter suchen.

Da ich noch nicht kommentieren darf, möchte ich hier meine Schlussfolgerung hinzufügen. Ich bin mir sicher, dass ich nicht der Einzige war, der daran interessiert war, wenn ich auf diese Seite zugreife:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

Wenn Sie den ersten Teil verlassen, erhalten Sie

 >>>myString[:end]
 'Hello' 

Und wenn du das verlassen hast: auch in der Mitte hast du den einfachsten Teilstring, der das fünfte Zeichen wäre (Zählung beginnend mit 0, also in diesem Fall das Leerzeichen):

 >>>myString[end]
 ' '

2
2018-03-18 12:01



Die Verwendung von hardcoded Indizes selbst kann ein Durcheinander sein.

Um dies zu vermeiden, bietet Python ein eingebautes Objekt an slice().

string = "my company has 1000$ on profit, but I lost 500$ gambling."

Wenn wir wissen wollen, wie viel Geld ich noch habe.

Normale Lösung:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

Scheiben verwenden:

EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

Mit Slice gewinnen Sie Lesbarkeit.


0
2017-08-31 04:50