sort lists lista python sorting in-place

python - lists - Ordenar una parte de una lista en su lugar



sort python 3 (3)

Digamos que tenemos una lista:

a = [4, 8, 1, 7, 3, 0, 5, 2, 6, 9]

Ahora, a.sort () ordenará la lista en su lugar. ¿Qué pasa si queremos ordenar solo una parte de la lista, todavía en su lugar? En C ++ podríamos escribir:

int array = { 4, 8, 1, 7, 3, 0, 5, 2, 6, 9 }; int * ptr = array; std::sort( ptr + 1, ptr + 4 );

¿Hay alguna manera similar en Python?


En función de sus requisitos, le sugiero que cree su propia clase de función / clase de contenedor para la lista con una función de clasificación que establezca sus requisitos.

Puede considerar el modismo de DSU o la transformación schwartziana: consulte http://wiki.python.org/moin/HowTo/Sorting y http://wiki.python.org/moin/PythonSpeed/PerformanceTips . Te sugiero que decores con 0 hasta i, el elemento entre i y j y 0 de nuevo j en adelante. Luego, use una función de comparación personalizada para devolver 0 si x o y es cero, ¡haga que la ordenación funcione! Esto puede no ser de ayuda, ya que hemos cruzado Python V2.4 hace mucho tiempo. Aún así, esto podría ser lo que estás buscando.

¡Esta respuesta se llena mientras trato de averiguar si se puede hacer con menos esfuerzo!


Lo escribiría de esta manera:

a[i:j] = sorted(a[i:j])

Tampoco es una ordenación in situ, pero lo suficientemente rápida para segmentos relativamente pequeños.

Tenga en cuenta que Python solo copia referencias de objetos, por lo que la penalización de velocidad no será tan grande en comparación con una ordenación real en el lugar como cabría esperar.


si a es una matriz numpy entonces para ordenar el rango [i, j) en el lugar, escriba:

a[i:j].sort()

Ejemplo:

>>> import numpy as np >>> a = np.array([4, 8, 1, 7, 3, 0, 5, 2, 6, 9]) >>> a[1:4].sort() >>> a array([4, 1, 7, 8, 3, 0, 5, 2, 6, 9])