2010-09-08 17 views
7

Ich habe eine unsortierte Liste von Ganzzahlen in einer Python-Liste. Ich möchte die Elemente in einer Teilmenge der vollständigen Liste und nicht in der vollständigen Liste selbst sortieren. Ich möchte auch die Liste an Ort und Stelle sortieren, um keine neuen Listen zu erstellen (ich mache das sehr häufig). Ich versuchte zunächstSortieren einer Unterliste in einer Python-Liste von Ganzzahlen

p[i:j].sort() 

aber den Inhalt von p nicht vermutlich ändern, weil eine neue Liste gebildet wurde, sortiert und dann weggeworfen, ohne den Inhalt der ursprünglichen Liste zu beeinflussen. Ich kann natürlich meine eigene Sortierfunktion erstellen und Schleifen verwenden, um die geeigneten Elemente auszuwählen, aber das fühlt sich nicht pythonisch an. Gibt es eine bessere Möglichkeit, Unterlisten zu sortieren?

Antwort

15

Sie schreiben p[i:j] = sorted(p[i:j])

+0

+1: Beat mich durch Sekunden mit einer einfacheren Lösung. –

+1

Immer noch nicht, was der Betreiber wünscht, aber was ich vorschlagen wollte. Es muss immer noch ein separates Sub-Array erstellen und es sortieren, bevor es 'p [i: j]' zugewiesen wird. Ich habe seit einiger Zeit darüber nachgedacht, dass es eine Option in sort() geben sollte, um den Bereich anzugeben, nach dem sortiert werden soll. Das würde die unnötige Speichernutzung eliminieren. –

+1

Das spricht sicherlich das "Wie" an, aber würde das nicht mindestens 2 neue Listen erstellen? Einer für das p [i: j] innen sortiert und der zweite für das Ergebnis aussortiert. – sizzzzlerz

0

"in place" bedeutet nicht viel. Du willst das.

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

Dies liegt daran, dass p [i: j] eine neue Liste zurückgibt. Ich kann an diese sofortige Lösung denken:

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

Sie könnten einfach 'p [i: j] = l' schreiben – kennytm

Verwandte Themen