¿Cómo puedo revertir una parte (segmento) de una lista en Python?

¿Por qué no funciona esto?

# to reverse a part of the string in place a = [1,2,3,4,5] a[2:4] = reversed(a[2:4]) # This works! a[2:4] = [0,0] # This works too. a[2:4].reverse() # But this doesn't work 

a[2:4] crea una copia de la lista secundaria seleccionada, y esta copia se invierte con a[2:4].reverse() . Esto no cambia la lista original. Cortar listas de Python siempre crea copias, puedes usar

 b = a[:] 

Para copiar toda la lista.

Sólo tiene que utilizar la rebanada y revertirla.

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

Otra forma que podrías considerar es usar una porción invertida:

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

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

Aquí hay un ejemplo extraño y una solución más extraña que utiliza el corte y un poco de los fundamentos de la lista.

Problema: Invertir 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.

Por ejemplo, harry porter

O / p: año retroP

Soln:

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