2010-09-08 14 views
7

Tengo una lista de enteros sin ordenar en una lista de Python. Quiero ordenar los elementos en un subconjunto de la lista completa, no la lista completa en sí misma. También quiero ordenar la lista para no crear nuevas listas (lo hago con mucha frecuencia). Inicialmente intentadoOrdenando una sublista dentro de una lista de enteros de Python

p[i:j].sort() 

pero esto no cambió el contenido de p presumiblemente porque se formó una nueva lista, ordenados, y luego se tiran sin afectar el contenido de la lista original. Por supuesto, puedo crear mi propia función de ordenamiento y usar bucles para seleccionar los elementos apropiados, pero esto no se siente pitónico. ¿Hay una mejor manera de clasificar sublistas en su lugar?

Respuesta

15

Puede escribir p[i:j] = sorted(p[i:j])

+0

+1: Batirme por segundos con una solución más simple. –

+1

Todavía no es lo que el operador desea, pero lo que iba a sugerir. Todavía tiene que hacer una sub-matriz por separado y ordenarla antes de asignarla a 'p [i: j]'. Hace algún tiempo que pensé que debería haber una opción en sort() para especificar el rango para ordenar. Eso eliminaría el uso de memoria innecesario. –

+1

Sin duda aborda el "cómo", pero ¿no crearía al menos 2 nuevas listas? Uno para el p [i: j] dentro ordenado y el segundo para el resultado de ordenado. – sizzzzlerz

0

"en lugar de" no significa mucho. Tu quieres esto.

p[i:j] = list(sorted(p[i:j])) 
-1

Esto se debe a que p [i: j] devuelve una nueva lista. Puedo pensar en esta solución inmediata:

l = p[i:j] 
l.sort() 
a = 0 
for x in range(i, j): 
    p[x] = l[a] 
    a += 1 
+0

Podrías escribir 'p [i: j] = l' – kennytm

Cuestiones relacionadas