Das verstehe ich nicht mit negativen Grenzen in Python schneiden. Wie soll das funktionieren?

StackOverflow https://stackoverflow.com/questions/493046

  •  20-08-2019
  •  | 
  •  

Frage

Ich bin ein Neuling auf Python und haben über das folgende Beispiel in meinem Buch kommen, die nicht sehr gut erklärt. Hier ist mein Ausdruck aus dem Dolmetscher:

>>> s = 'spam'
>>> s[:-1]
'spa'

Warum ohne Anfang nicht gebunden fühlt Schneiden und ein '-1' Rückkehr jedes Element außer dem letzten? Ruft s[0:-1] logisch das gleiche wie der Aufruf von s[:-1]? Beide Rück das gleiche Ergebnis. Aber ich bin nicht sicher, welcher Python genau tut. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

Ja, s[0:-1] Aufruf ist genau das gleiche wie s[:-1] aufrufen.

eine negative Zahl Verwendung als ein Index in Python das n-te Element von der rechten Seite der Liste gibt (im Gegensatz zu der üblichen linken Seite gegenüberliegt).

Wenn Sie also eine Liste haben, wie so:

myList = ['a', 'b', 'c', 'd', 'e']
print myList[-1] # prints 'e'

die print-Anweisung wird "e" drucken.

Wenn Sie verstehen, dass (die Sie vielleicht schon, es ist nicht ganz klar, ob das ist eines der Dinge, die Sie sind verwirrt darüber, oder nicht) wir reden über Aufschneiden beginnen können.

Ich werde Sie die Grundlagen einer Scheibe entlang der Linien von myList[2:4] verstehen zu übernehmen (die ['c', 'd'] zurück) und direkt in die Schneid Notation springen, wo eine Seite leer gelassen wird.

Wie Sie in Ihrem Beitrag vermuten, myList[:index] ist genau die gleiche wie myList[0:index].

Dies ist funktioniert auch umgekehrt, übrigens ... myList[index:] die gleiche wie myList[index:len(myList)] ist und eine Liste aller Elemente aus der Liste ab index und geht bis zum Ende zurückkehren (zB print myList[2:] ['c', 'd', 'e'] drucken ).

Als dritter Note, können Sie sogar print myList[:] tun, wo nicht Index angezeigt wird, die im Grunde eine Kopie der gesamten Liste zurück (entspricht myList[0:len(myList)], kehrt [ 'a', 'b' , 'c', 'd', 'e']). Dies könnte nützlich sein, wenn Sie denken, myList irgendwann ändern wird, aber Sie wollen eine Kopie davon in seinem aktuellen Zustand zu halten.

Wenn Sie nicht bereits tun ich nur finden Herumspielen in einem Python-Interpreter eine ganze Reihe eine große Hilfe auf diese Dinge zu verstehen. Ich empfehle IPython .

Andere Tipps

Der entscheidende Punkt ist, dass Python-Indizes sollte in einer Liste zwischen den Einträgen zu den Räumen der als Zeiger gedacht werden, anstatt auf die Elemente selbst. Daher 0 Punkte zu Beginn, 1, die zwischen dem ersten und den zweiten, ... und n zwischen dem n-ten und (n + 1) -te.

So l [1: 2]. Erhalten Sie eine Liste nur Element l enthalten [1], da es bietet alles, was zwischen den beiden Zeigern

ähnlich negativer Indizes Punkt in zwischen den Elementen, diesmal jedoch von der Rückseite, also -1 Punkte zwischen dem letzten Elemente und dem nächsten bis letzter Zählung, so [0: 1] bezieht sich auf einen Block von Elementen nicht einschließlich, dass die letzte.

Wie syntaktischer Zucker, können Sie 0 am Anfang oder in der Tat aufhören, das Ende, so l [n:] bezieht sich auf alles, von l [n] bis zum Ende (wenn n> = len (l), dann es gibt eine leere Liste).

>>> l = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz&']

# I want a string up to 'def' from 'vwx', all in between
# from 'vwx' so -2;to 'def' just before 'abc' so -9; backwards all so -1.
>>> l[-2:-9:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']

# For the same 'vwx' 7 to 'def' just before 'abc' 0, backwards all -1
>>> l[7:0:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']

Bitte werde nicht lustlos über Liste.

  1. Schreiben Sie das erste Element zuerst. Sie können positiven oder negativen Index verwenden, dafür. Ich bin faul, so verwende ich positiv, einen Schlag weniger (unter 7 oder -3 für den Start).
  2. Index des Elements kurz vor, wo Sie aufhören wollen. Auch hier können Sie positiven oder negativen Index für diese Verwendung (unter 2 oder -8 für Stopp).
  3. Hier Angelegenheiten unterzeichnen; natürlich - für rückwärts; Wert schreiten Sie wissen. Stride ist ein ‚Vektor‘ mit sowohl Größe und Richtung (unter -1, rückwärts alle).

    l = [0,1,2,3,4,5,6,7,8,9]
    l[7:2:-1], l[-3:2:-1], [-3:-8:-1],l[7:-8:-1]
    

    Alle Ergebnis in [7, 6, 5, 4, 3].

Negativ Indizes werden vom Ende gezählt, so s [: - 1] ist äquivalent zu s. [: Len (s) -1] und s [-1] ist das letzte Element, zum Beispiel

Ja, s[0:-1] Aufruf ist logisch die gleiche wie s[:-1] seit Slicing, wie am besten definiert ist:

[beginning_index:ending_index]

Python können Sie 0 wegzulassen, da dies Ihren Code mehr terse ermöglicht.

Wenn wir wollen, von dem Back-End der Zeichenfolge drucken wir für negative Indizierung gehen können. Indizierung beginnt von -1.

Beispiel: s = 'Hallo Welt'

s [-11: -1] = 'hallo Worl' s: (d. h, in diesem Fall -1 größer als -11). [-1 -11] = '' // Wert beginnen sollte niedriger sein, wenn es größer druckt es wird nicht alles ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top