Code: Alles auswählen
list1 = ['Gabi', 'Depp', 'Tux', 'PG']
list2 = [11, 12, 0, 18]
gruss und dank frank
Code: Alles auswählen
list1 = ['Gabi', 'Depp', 'Tux', 'PG']
list2 = [11, 12, 0, 18]
Code: Alles auswählen
>>> list1 = ['Gabi', 'Depp', 'Tux', 'PG']
>>> list2 = [11, 12, 0, 18]
>>> l1=[]
>>> l2=[]
>>> x = sorted(zip(list2, list1))
>>> x
[(0, 'Tux'), (11, 'Gabi'), (12, 'Depp'), (18, 'PG')]
>>> for val, name in reversed(x):
l1.append(name)
l2.append(val)
>>> l1
['PG', 'Depp', 'Gabi', 'Tux']
>>> l2
[18, 12, 11, 0]
>>>
Code: Alles auswählen
l = [(0, 'Tux'), (11, 'Gabi'), (12, 'Depp'), (18, 'PG')]
# nach zahlen sortieren:
print sorted(l)
# nach namen:
print sorted(l, key = lambda x: x[1])
Code: Alles auswählen
punkte = [11, 12, 0, 18]
namen = ['Gabi', 'Depp', 'Tux', 'PG']
reihenfolge = zip(*sorted(zip(punkte, namen), key=lambda x: x[0]))
Code: Alles auswählen
key=lambda x: -x[0]
"lambda x: -x[0]" definiert eine Funktion, die als Argument x (entspricht dann einem (Punkte, Name)-Paar) erhält, von dem es das erste Element extrahiert und negiert zurückgibt. Das wird vor dem Sortieren auf alle Elemente der (Punkte, Name)-Paarliste angewendet, so dass intern eine Liste von negativen Punktwerten erzeugt wird. Negativ deshalb, weil 'sorted' standardmäßig aufwärts sortiert und somit die betragsmäßig größten Werte nach oben sortiert werden. Ich hoffe, ich habe das richtig verstanden, denn dafür gibt ja noch das Attribute 'reverse' [EDIT: Argument, sorry]:kaytec hat geschrieben:Das mit zip() habe ich so halbwegs verstanden, doch ich vertsehe nicht was die lambdafunktion macht !
2.1 Built-in Functions hat geschrieben:sorted( iterable[, cmp[, key[, reverse]]])
In Python gibt es für zusammengehörige Werte den Datentyp Tupel, der die zusammengehörigen Werte zu einer Einheit zusammenfasst. Die Lösungsvorschläge beruhen darauf, dass die zusammen gehörenden Namen und Werte zu einer Liste von Paaren zusammengefasst, dann sortiert und dann wieder getrennt werden.kaytec hat geschrieben:Sinn bei meinen Sortierproblem würde für mich machen, wenn die keys der einen liste an die anderen gebunden wären. Verändere ich die eine liste, dann verändert sich die andere - ohne die Anbindung von Bedingungen. - hat das jemand verstanden ?
Code: Alles auswählen
def reverse_parallel_sort(*sequences):
i = iter(xrange(len(sequences[0])))
return zip(*sorted(zip(*sequences), key=lambda t: (t[0], -i.next()), reverse=True))
def parallel_sort(*sequences):
i = iter(xrange(len(sequences[0])))
return zip(*sorted(zip(*sequences), key=lambda t: (t[0], i.next())))
p = [17, 13, 16, 17]
n = ["Heinz", "Depp", "Merkel", "PG"]
print reverse_parallel_sort(p, n)
print parallel_sort(p, n)
Zur Erklärung:>>> [(17, 17, 16, 13), ('Heinz', 'PG', 'Merkel', 'Depp')]
>>> [(13, 16, 17, 17), ('Depp', 'Merkel', 'Heinz', 'PG')]
Code: Alles auswählen
i = (x for x in range(len(sequences[0])))