2009-03-25 15 views
7

Affinché non dire si desidera che l'ultimo elemento di una lista python: qual è la differenza traChe differenza c'è tra la lista [-1:] [0] e la lista [len (lista) -1]?

myList[-1:][0] 

e

myList[len(myList)-1] 

ho pensato che non vi era alcuna differenza, ma poi ho provato questo

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

Ero un po 'sorpreso ...

+1

Non certo perché si sta scrivendo 'elenco [-1:] [0]'; il solito modo di scrivere è solo 'lista [-1]'. Inoltre, probabilmente si vorrebbe evitare di ombreggiare la 'lista'() 'assegnando il proprio elenco' lista'. – kquinn

risposta

14

se si utilizza slicing [-1:], l'elenco restituito è una copia superficiale, non un riferimento. quindi [-1:] [0] modifica la nuova lista. [len (list) -1] è un riferimento all'ultimo oggetto.

9

list[-1:] crea una nuova lista. Per ottenere lo stesso comportamento di list[len(list)-1], è necessario restituire una vista di una specie di list, ma come ho detto, crea una nuova lista temporanea. Quindi procedere a modificare l'elenco temporaneo.

In ogni caso, sai che puoi usare lo list[-1] per la stessa cosa, giusto?

+0

Um ... giusto ... Sapevo che ... – c0m4

3

Il taglio crea copia (copia superficiale). È spesso usato come un idioma di copia superficiale.

cioè

list2 = list1[:] 

è equivalente a

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

sembra meno leggibile/comprensibile rispetto all'utilizzo della copia ... C'è una ragione per cui è "usato spesso"? – tgray

+0

Sono d'accordo che sia meno leggibile. Perché è usato? Immagino, è perché non richiede l'importazione. – vartec

+0

Pensi che stiano evitando l'importazione perché richiede un'altra riga di codice o perché stanno cercando di evitare una sorta di sovraccarico (memoria, tempo di caricamento, ecc.)? – tgray

Problemi correlati