2011-01-10 9 views

Respuesta

16

a[2:4] crea una copia de la lista secundaria seleccionada, y esta copia se invierte por a[2:4].reverse(). Esto no cambia la lista original. Rebanar Python enumera siempre crea copias - se puede utilizar

b = a[:] 

para copiar toda la lista.

+1

@ Ismail: No veo una conexión entre la mutabilidad y el hecho de que crea rebanar copias. Cortar matrices NumPy no crea copias, y también son mutables. Estas son decisiones de diseño independientes. –

+0

@ İsmail: parece que no entiendo lo que buscas. Si las listas de Python fueran inmutables, no se podría decir si se creó una copia o no, porque no se puede modificar de todos modos. –

+1

Nit: "_Las listas de Python crea siempre copias _" - excepto cuando están asignadas a, como en 'a [2: 4] = invertido (a [2: 4])' en el ejemplo del OP. La gente puede ser inducida a pensar que 'x = invertido (x)' y 'x.reverse()' ambos modifican 'x', pero son operaciones fundamentalmente diferentes en Python, y sus resultados difieren cuando' x' no es una variable como se muestra aquí – musiphil

1

a [2: 4] es una copia de la lista a que se genera utilizando los 2,3,4 elementos de la lista a. Los primeros dos funcionan porque está asignando los cambios a esos puntos en la lista original. El último no funciona porque no está afectando la lista original.

4

Otra forma es posible considerar es el uso de una rebanada invertido:

a[2:4] = a[3:1:-1] 
+2

Debe ser un [3: 1: -1]. –

+0

Si bien esto funciona, no hay forma de utilizar este método exacto para invertir un corte que contiene el primer elemento. – quintopia

+0

@quintopia Es, en realidad: simplemente omita el primer índice: 'afirme un [3 :: - 1] == [4, 3, 2, 1]' – VMAtm

3

sólo tiene que utilizar la división y revertirla.

a[2:4] = a[2:4][::-1] 
0

Aquí está un ejemplo raro y más raro solución usando corte en rodajas y un poco de fundamentos de la lista.

Problema: Reverse una lista en partes de dos.

I/P: [1,2,3,4,5,6]

O/P: [3,2,1,6,5,4]

Soln:

[item for i in range(0,len(l),len(l)/2) for item in l[i:i+len(l)/2][::-1]] 

Problema: Invertir las letras del nombre de alguien.

Ej Harry Porter

O/P: yrraH Retrop

Soln:

' '.join(map(lambda x:x[::-1], s.split())) 
Cuestiones relacionadas