it-swarm.com.de

Gibt es eine Möglichkeit, einen String mit einer Unterzeichenfolge zu versehen?

Gibt es eine Möglichkeit, einen String in Python mit einem Teilstring zu versehen, um einen neuen String vom dritten Zeichen bis zum Ende des Strings 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 dann von vorne?

1759
Joan Venge
>>> 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 "Slicing" und funktioniert nicht nur mit Strings. Schauen Sie hier für eine umfassende Einführung.

2671

Nur der Vollständigkeit halber, wie es sonst niemand erwähnt hat. Der dritte Parameter eines Array-Slice ist ein Schritt. Das Umkehren eines Strings ist so einfach wie folgt:

some_string[::-1]

Oder die Auswahl alternativer Zeichen wäre:

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

Die Möglichkeit, durch die Zeichenfolge vorwärts und rückwärts zu blättern, behält die Konsistenz mit der Möglichkeit, Slice vom Anfang oder vom Ende aus anzuordnen.

327
Endophage

Substr () funktioniert normalerweise (d. H. PHP und Perl) auf diese Weise: 

s = Substr(s, beginning, LENGTH)

Die Parameter sind also beginning und LENGTH.

Aber Pythons Verhalten ist anders; es erwartet einen Anfang und einen nach ENDE (!). Dies ist für Anfänger schwer zu erkennen. So ist der richtige Ersatz für Substrate (s, Beginn, LENGTH)

s = s[ beginning : beginning + LENGTH]
102
Michał Leon

Ein üblicher Weg, um dies zu erreichen, ist das Schneiden von Strings. 

MyString[a:b] gibt Ihnen einen Teilstring vom Index a bis (b - 1).

47
codingscientist

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

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

Dies ist ein allgemeiner Ausdruck für das Erstellen einer Kopie von Sequenztypen (nicht von internen Zeichenfolgen), [:]. Flache kopiert eine Liste, siehe Die Slice-Syntax der Python-Liste wird ohne ersichtlichen Grund verwendet.

17
gimel

Gibt es eine Möglichkeit, einen String in Python mit einem Teilstring zu versehen, um einen neuen String vom dritten Zeichen bis zum Ende des Strings zu erhalten?

Vielleicht wie myString[2:end]?

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

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

Die Slice-Notation hat 3 wichtige Argumente:

  • start
  • halt
  • schritt

Ihre Standardwerte 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 dann von vorne?

Ja zum Beispiel:

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

Beachten Sie, dass wir start in das Slice einschließen, aber wir gehen nur bis zu stop und nicht einschließlich.

Wenn Schritt None ist, verwendet das Slice 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 die Schichtnotation ausführlich in meine Antwort auf die Erläuterung der Schichtnotation.

17
Aaron Hall

Sie haben es genau dort, außer für "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.

8
bouvard

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

  1. Sie können stattdessen None für ein leeres Feld verwenden, um "vom Anfang" oder "bis zum Ende" anzugeben:

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

    Dies ist besonders hilfreich bei Funktionen, bei denen Sie keine leeren Felder 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 objects:

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

Das ist ziemlich einfach:

s = 'Hello, World!'
print(s[:]) # prints "Hello, World!"
print(s[:5]) # prints Hello
print(s[5:]) # prints , World!
print(s[3:7]) # prints "lo, "
4
Muskovets

Vielleicht habe ich es verpasst, aber ich konnte auf dieser Seite keine vollständige Antwort auf die ursprüngliche Frage (n) finden, da Variablen hier nicht weiter erläutert 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 beim Aufruf dieser Seite nicht der einzige war, der daran interessiert war: 

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

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

Wenn Sie den ersten Teil verlassen, bekommen Sie 

 >>>myString[:end]
 'Hello' 

Und wenn Sie das: verlassen haben, erhalten Sie auch in der Mitte den einfachsten Teilstring, der das fünfte Zeichen sein würde (Zählweise beginnt mit 0, in diesem Fall also das Leerzeichen):

 >>>myString[end]
 ' '
3
Rudi Uhl

Die Verwendung von fest codierten Indizes kann selbst ein Chaos sein.

Um dies zu vermeiden, bietet Python ein eingebautes Objekt 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
levi

Basierend auf der Antwort von @CopyPastelt, wenn Sie eine Teilzeichenfolge basierend auf Offset und Länge wünschen:

def substring(s, offset=None, length=None):
    return s[offset:][:length]

Anwendungsbeispiel:

string = 'Hello Beautiful World'
substring(string) #returns 'Hello Beautiful World'
substring(string,length=5) #returns 'Hello'
substring(string,6,9) #returns 'Beautiful'
substring(string,16) #returns 'World'
0
Victor Val

Wenn myString eine Kontonummer enthält, die mit Offset 6 beginnt und die Länge 9 hat, können Sie die Kontonummer folgendermaßen extrahieren: acct = myString[6:][:9].

Wenn das OP das akzeptiert, möchten sie vielleicht auf experimentelle Weise versuchen,

myString[2:][:999999]

Es funktioniert - es wird kein Fehler ausgegeben und es tritt kein Standardauffüllen von Zeichenfolgen auf.

0
CopyPasteIt