2012-07-06 15 views
52

Powiel możliwe:
Explain slice notationIndeks listy ujemnej?

Próbuję zrozumieć następujący fragment kodu:

# node list 
n = [] 
for i in xrange(1, numnodes + 1): 
    tmp = session.newobject(); 
    n.append(tmp) 
link(n[0], n[-1]) 

Konkretnie, ja nie rozumiem, co indeks -1 odnosi się do. Jeśli indeks 0 odnosi się do pierwszego elementu, to co odnosi się do -1?

+2

Myślę, że to pytanie dotyczy tego samego podłoża na końcu, co [Good Primer for Python Slice Notation] (http://stackoverflow.com/questions/509211/good-primer-for-python-slice-notation) – Daenyth

+0

I myślę, że to prawda .. dzięki! – Dawood

Odpowiedz

96

Liczby ujemne oznaczają, że liczysz od prawej zamiast lewej. Tak więc, list[-1] odnosi się do ostatniego elementu, list[-2] jest drugim i tak dalej.

+7

Jednak jest pewne zastrzeżenie: zachowanie jest nieco inne, jeśli spróbujesz zapisu plastycznego. Jeśli użyjesz -1 w takim przypadku, zwróci jeden element z ostatniego. >>> a = [1,2,3,4,5] >>> a [-1] >>> a [: - 1] [1, 2, 3, 4] – abought

+5

@ abought Czy to nie jest normalne zachowanie? Gdybym powiedział "a [4]", to zwróciłby 5, ale 'a [: 4]' zwraca [1,2,3,4] – yesennes

6

Indeksy indeksów -x oznaczają x pozycję od końca listy, więc n[-1] oznacza ostatnią pozycję na liście n. Każdy dobry samouczek w języku Python powinien był ci o tym powiedzieć.

To niecodzienna konwencja, którą przyjęło kilka języków poza Pythonem, ale jest niezwykle użyteczna; w dowolnym innym języku spędzisz dużo czasu, pisząc n[n.length-1], aby uzyskać dostęp do ostatniego elementu listy.

+1

Prawdziwy, chociaż nie wszystkie języki są w stanie podążać za tym projektem. W C, 'n [-1]' dosłownie oznacza element przed 'n [0]' i jest w porządku, jeśli n wskazuje na tablicę - nawet jeśli jest to normalnie błąd. [http://dlang.org/d-array-article.html](Slicing in D) jest ciekawym podejściem do bezpiecznego cięcia w pamięci w języku ojczystym, w tym notacji od prawej. –

+0

Python ma tę funkcję bezpośrednio z Perla: https://stackoverflow.com/questions/15911115/arrays-and-negative-indexes-in-perl. Według mojej wiedzy Larry sam wymyślił to dla Perla, ale mógł go zdobyć skądinąd. –

Powiązane problemy