web-dev-qa-db-fra.com

Trier une partie d'une liste en place

Disons que nous avons une liste:

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

Maintenant, a.sort () triera la liste en place. Et si nous voulons trier seulement ne partie de la liste, toujours en place? En C++ on pourrait écrire:

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

Existe-t-il une méthode similaire en Python?

41
Headcrab

Je l'écrirais de cette façon:

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

Ce n'est pas un tri sur place non plus, mais assez rapide pour des segments relativement petits.

Veuillez noter que Python copie uniquement les références aux objets, donc la pénalité de vitesse ne sera pas aussi énorme par rapport à un véritable tri sur place comme on pourrait s'y attendre.

55
fviktor

si a est un tableau numpy alors trier [i, j) plage en place, tapez:

a[i:j].sort()

Exemple:

>>> 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])
24
jfs