2010-09-08 12 views
7

Ho un elenco non ordinato di numeri interi in un elenco Python. Voglio ordinare gli elementi in un sottoinsieme dell'elenco completo, non sull'elenco completo stesso. Voglio anche ordinare la lista sul posto in modo da non creare nuove liste (lo faccio molto spesso). Inizialmente ho provatoOrdinamento di una sottolista in un elenco di numeri interi Python

p[i:j].sort() 

ma questo non ha cambiato il contenuto della p presumibilmente a causa di un nuovo elenco è stato formato, ordinati, e poi gettati via senza alterare il contenuto della lista originale. Posso, naturalmente, creare la mia funzione di ordinamento e utilizzare i cicli per selezionare gli elementi appropriati, ma questo non sembra pitonico. C'è un modo migliore per ordinare le sottoliste sul posto?

risposta

15

È possibile scrivere p[i:j] = sorted(p[i:j])

+0

+1: Batti in pochi secondi con una soluzione più semplice. –

+1

Ancora non quello che l'operatore desidera, ma quello che stavo per suggerire. Deve ancora creare un sotto-array separato e ordinarlo prima di assegnarlo a 'p [i: j]'. Ho pensato per qualche tempo che ci dovrebbe essere un'opzione in sort() per specificare l'intervallo per ordinare sopra. Ciò eliminerebbe l'uso di memoria non necessario. –

+1

Indica certamente il "come" ma non creerebbe almeno 2 nuovi elenchi? Uno per il p [i: j] all'interno ordinato e il secondo per il risultato da ordinati. – sizzzzlerz

0

"sul posto" non significa molto. Tu vuoi questo.

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

Questo perché p [i: j] restituisce una nuova lista. Posso pensare a questa soluzione immediata:

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

Si potrebbe semplicemente scrivere 'p [i: j] = l' – kennytm

Problemi correlati