Hatte folgendes Problem:
Die Datensätze einer mehrspaltigen ListCtrl werden ausgelesen. Daraus resultiert eine Liste von Tupeln. Diese soll nach Vorgabe sortiert werden (abwärts oder aufwärts!). Hab nun eine Funktion geschrieben, die unter Angabe der Spalte des Tupel die Liste dementsprechend sortiert. Ganz nützlich wie ich finde, jedoch recht lang.
Bin für jeden Verbesserungsvorschlag dankbar!
Code: Alles auswählen
ABSTEIGEND = 1
AUFSTEIGEND = 2
def quicksort(l, richtung):
if l:
if (richtung==ABSTEIGEND):
left = [x for x in l if x > l[0]]
right = [x for x in l if x < l[0]]
else:
left = [x for x in l if x < l[0]]
right = [x for x in l if x > l[0]]
if len(left) > 1:
left = quicksort(left, richtung)
if len(right) > 1:
right = quicksort(right, richtung)
return left + [l[0]] * l.count(l[0]) + right
return []
def do_quicksort(l,r):
return (quicksort(l,r))
def sort_tupel_list(liste,sort_col_index, richtung):
#
# Parameter: liste = Liste aus Tupeln
# sort_col_index = Spaltenindex der Wahlspalte
# richtung = AUFSTEIGEND oder ABSTEIGEND
#
temp_list = []
index = 0
for tupel in liste:
listtup = list(tupel)
if (sort_col_index != 0):
temp = listtup[0]
listtup[0] = listtup[sort_col_index]
listtup[sort_col_index] = temp
temp_list.append((listtup,index))
index += 1
temp_list = do_quicksort(temp_list,richtung)
new_list = []
for (x, index) in temp_list:
new_list.append(liste[index])
return(new_list)
#Spalte: 0 1 2
liste = [(1,"Meier", 1940),
(3,"Smeelings" ,1976),
(4,"Mueller" ,1980),
(5,"Breuers" ,1974)]
print(liste)
liste = sort_tupel_list(liste,1,ABSTEIGEND) #oder ABSTEIGEND
print(liste)
Bugs