2009-03-25 25 views
7

Para que no diga que desea que el último elemento de una lista de Python: ¿cuál es la diferencia entre¿Cuál es la diferencia entre list [-1:] [0] y list [len (list) -1]?

myList[-1:][0] 

y

myList[len(myList)-1] 

pensé que no había ninguna diferencia, pero luego he intentado esto

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

Estaba un poco sorprendido ...

+1

No sé por qué estás escribiendo 'lista [-1:] [0] '; la forma habitual de escribir eso es simplemente 'list [-1]'. Además, es probable que desee evitar sombrear la lista 'incluida()' al nombrar su lista 'list'. – kquinn

Respuesta

14

si usa rebanando [-1:], la lista devuelta es una copia superficial, no de referencia. entonces [-1:] [0] modifica la nueva lista. [len (list) -1] es referencia al último objeto.

9

list[-1:] crea una nueva lista. Para obtener el mismo comportamiento que list[len(list)-1] tendría que devolver una vista de algún tipo de list, pero como he dicho, crea una nueva lista temporal. Luego procedes a editar la lista temporal.

De todos modos, usted sabe que puede usar list[-1] para lo mismo, ¿no?

+0

Um ... bien ... Sabía que ... – c0m4

3

Cortar crea copia (copia superficial). A menudo se usa como un modismo de copia superficial.

decir

list2 = list1[:] 

es equivalente a

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

que parece menos legible que el uso de copia ... ¿Hay alguna razón por la que se "use a menudo"? – tgray

+0

Acepto que es menos legible. ¿Por qué se usa? Supongo que es porque no requiere importación. – vartec

+0

¿Cree que están evitando la importación porque toma otra línea de código, o porque están tratando de evitar algún tipo de sobrecarga (memoria, tiempo de carga, etc.)? – tgray

Cuestiones relacionadas