2009-03-25 8 views
7

Lest że chcesz ostatni element listy Pythona: Jaka jest różnica międzyJaka jest różnica między listą [-1:] [0] a listą [len (lista) -1]?

myList[-1:][0] 

i

myList[len(myList)-1] 

myślałem, nie było różnicy, ale potem próbowałem to

>>> list = [0] 
>>> list[-1:][0] 
0 
>>> list[-1:][0] += 1 
>>> list 
[0] 
>>> list[len(list)-1] += 1 
>>> list 
[1] 

Byłem trochę zaskoczony ...

+1

Nie wiem dlaczego piszesz 'listy [-1:] [0]'; zwykłym sposobem zapisu jest właśnie 'lista [-1]'. Ponadto, prawdopodobnie nie chcesz cienia wbudowanej 'list()', nazywając twoją listę 'list'. – kquinn

Odpowiedz

14

jeśli używasz krojenie [-1:], zwrócona lista jest płytką kopią, a nie referencją. więc [-1:] [0] modyfikuje nową listę. [len (lista) -1] odnosi się do ostatniego obiektu.

9

list[-1:] tworzy nową listę. Aby uzyskać takie samo zachowanie, jak list[len(list)-1], musiałby on zwrócić widok pewnego rodzaju list, ale jak już powiedziałem, tworzy nową tymczasową listę. Następnie przejdziesz do edycji listy tymczasowej.

W każdym razie wiesz, że możesz użyć list[-1] dla tego samego, prawda?

+0

Um ... racja ... wiedziałem, że ... – c0m4

3

Krojenie tworzy kopię (płytka kopia). Jest często używany jako płytki idiom kopiowy.

tj

list2 = list1[:] 

jest równoważna

import copy 
list2 = copy.copy(list1) 
+0

wydaje się mniej czytelne/zrozumiałe niż używanie kopii ... Czy istnieje powód, dla którego jest "często używany"? – tgray

+0

Zgadzam się, że jest mniej czytelny. Dlaczego jest używany? Chyba dlatego, że nie wymaga importu. – vartec

+0

Czy myślisz, że unikają importowania, ponieważ wymaga to kolejnej linii kodu lub ponieważ próbują uniknąć pewnego rodzaju obciążenia (pamięci, czasu ładowania itp.)? – tgray

Powiązane problemy