2013-03-20 22 views
12

Praca nad zadaniem Pythona i była ciekawa, co [: -1] oznacza w kontekście następującego kodu: instructions = f.readline()[:-1]Co znaczy [: -1] w pythonie?

Szukano tutaj na S.O. i w Google, ale bez skutku. Chciałbym wyjaśnienia!

+0

Czasami -1 służy do wyrażania końca szeregu rzeczy. Domyślam się, że to znaczy czytać od początku do końca wiersza (ale tylko przypuszczenie, stąd nie oficjalna odpowiedź). – Daedalus

+0

Nie jestem pewien, czy to dup, z powodu tego "w kontekście ..." części - która jest tą częścią, którą ty i, szczególnie, odpowiedział Pavel Anossov. – abarnert

Odpowiedz

21

To plastry ciąg pominąć ostatni znak w tym przypadku znak nowej linii:

>>> 'test\n'[:-1] 
'test' 

Ponieważ to działa nawet na pustych ciągach znaków, jest to całkiem bezpieczny sposób usunięcia tego ostatniego znaku, jeśli występuje:

>>> ''[:-1] 
'' 

Działa to w dowolnej sekwencji, a nie tylko w łańcuchach.

+1

dzieli sekwencję * - może to być po prostu ciąg znaków. –

+1

Dziękujemy! Idealny. "Sprawdzę" tę odpowiedź, kiedy pozwala mi to zrobić. –

+0

Hmm, myślę, że użyję tego na głupią minę podczas pisania! [: -1] – Stephen

1

Otrzymuje wszystkie elementy z listy (lub znaki z łańcucha), ale ostatni element.

: reprezentuje przeżywa listy -1 oznacza ostatni element listy

+2

Jest to napisany na tyle niejednoznacznie, że może być mylący. To wszystkie elementy do _ ale nie wliczając_ ostatniego elementu. (Jeśli wiesz już, jak plasterki/zakresy/itd. Działają w Pythonie, to wiedząc, że -1 jest ostatnim elementem, mówi ci wszystko, czego potrzebujesz ... ale jeśli nie, nadal nie będziesz po tej odpowiedzi.) – abarnert

7

Wybiera wszystkie oprócz ostatniego elementu sekwencji.

Przykład poniżej na podstawie listy:

In [15]: a=range(10) 

In [16]: a 
Out[16]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

In [17]: a[:-1] 
Out[17]: [0, 1, 2, 3, 4, 5, 6, 7, 8] 
+0

Wycina sekwencję * - może to być tylko lista. –

13

oznacza „wszystkie elementy sekwencji, ale ostatnie”. W kontekście f.readline()[:-1] oznacza to "jestem prawie pewny, że linia kończy się znakiem nowej linii i chcę ją usunąć".

+0

Chociaż odpowiedź Martijna Pietersa jest nieco bardziej szczegółowa i objaśniająca, podoba mi się, że ta bezpośrednio opisuje idiom użycia '[: -1]' z 'readline', odpowiadając na część" OP "w kontekście ...". (Tak, +1 do was obojga.) – abarnert

+0

Warto zauważyć, że wykonanie tego założenia może być niebezpieczne, nawet w systemie, w którym oczekuje się, że znacznik końca linii ma długość jednej postaci-- nierzadko kończy się brakiem nowego wiersza w ostatniej linii pliku. Jest to szczególnie ważne, gdy Python jest zaangażowany: widziałem '' \ n'.join (linie) 'używane wcześniej, co spowoduje dokładnie to się dzieje, a następnie tracisz postać danych .. – DSM