2009-03-25 11 views
7

Lest sagen Sie das letzte Element einer Python-Liste wollen: was ist der Unterschied zwischenWas ist der Unterschied zwischen list [-1:] [0] und list [len (list) -1]?

myList[-1:][0] 

und

myList[len(myList)-1] 

Ich war kein Unterschied dachte, es ist aber dann habe ich versucht, diese

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

Ich war ein wenig überrascht ...

+1

nicht sicher, warum Sie schreiben 'Liste [-1:] [0]'; Die übliche Art zu schreiben, ist nur 'list [-1]'. Wahrscheinlich möchten Sie auch vermeiden, die eingebaute 'list()' zu beschatten, indem Sie Ihre Liste 'liste' benennen. – kquinn

Antwort

14

wenn Sie verwenden slicing [-1:], die zurückgegebene Liste ist eine flache Kopie, keine Referenz. So ändert [-1:] [0] die neue Liste. [len (list) -1] ist ein Verweis auf das letzte Objekt.

9

list[-1:] erstellt eine neue Liste. Um das gleiche Verhalten wie list[len(list)-1] zu erhalten, müsste es eine Ansicht einer Art von list zurückgeben, aber wie gesagt, es erstellt eine neue temporäre Liste. Anschließend bearbeiten Sie die temporäre Liste.

Wie auch immer, Sie wissen, dass Sie list[-1] für die gleiche Sache verwenden können, richtig?

+0

Ähm ... richtig ... Ich wusste, dass ... – c0m4

3

Slicing erstellt Kopie (flache Kopie). Es wird oft als oberflächliches Kopier-Idiom verwendet.

heißt

list2 = list1[:] 

entspricht

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

das scheint weniger lesbar/verständlich als mit Kopie ... Es gibt einen Grund, es ist "oft verwendet"? – tgray

+0

Ich stimme zu, dass es weniger lesbar ist. Warum wird es verwendet? Ich denke, das liegt daran, dass kein Import erforderlich ist. – vartec

+0

Denken Sie, dass sie den Import vermeiden, weil sie eine andere Codezeile benötigt oder weil sie versuchen, einen gewissen Overhead (Speicher, Ladezeit usw.) zu vermeiden? – tgray

Verwandte Themen