Die Version von birkenfeld ist schon richtig. Hatte noch einen alten reverse() drin und so hatte es natürlich nicht richtig funktioniert

So - nun habe ich ja viel zu lesen und mache mal Hausaufgaben.
danke frank
Man benötigt den Namen, um auf das Objekt zuzugreifen. (wer blöd fragt, bekommt blöde antworten)BlackJack hat geschrieben:Was das `i` *ist* habe ich ich schon verstanden, ich wollte wissen wozu man das hier braucht!?
Ich nutze privat 2.4.1BlackJack hat geschrieben:Meine eigentliche Frage war genau letztere. Python's Sortiermethode ist "stable". Jedenfalls ab Python 2.3. Du solltest wirklich mal upgraden.
Michael Schneider hat geschrieben:Hätte auch einen eigenen Generator wieschreiben können, was aber nicht viel schöner ist. Es gibt sicher noch viele andere Möglichkeiten, das ist nur die, die mir spontan einfiel. Ich bin für alles offen.Code: Alles auswählen
i = (x for x in range(len(sequences[0])))
![]()
Code: Alles auswählen
itertools.count()
Soll das eine Anspielung sein?birkenfeld hat geschrieben:Huch, gibts erst ab 2.3.Code: Alles auswählen
itertools.count()
Code: Alles auswählen
gesamt_wertung = [[('Gabi', 1), ('Tux', 2), ('Frankie', 3), ('Schroeder', 4)],
[('Schroeder', 1), ('Frankie', 2), ('Tux', 3), ('Gabi', 4)],
[('Tux', 1), ('Gabi', 2), ('Frankie', 3), ('Schroeder', 4)],
[('Tux', 1), ('Frankie', 2), ('Gabi', 3), ('Schroeder', 4)]]
gesamt_wertung = [(['Svetlana', 'Merkel', 'Bush', 'Bloedel'], [1, 2, 3, 4]),
(['Bloedel', 'Svetlana', 'Bush', 'Merkel'], [1, 2, 3, 4]),
(['Merkel', 'Svetlana', 'Bloedel', 'Bush'], [1, 2, 3, 4]),
(['Bloedel', 'Merkel', 'Bush', 'Svetlana'], [1, 2, 3, 4])]
gesamt_werung = [['Frankie', 'Merkel', 'PG', 'Lina'],
['Lina', 'Frankie', 'PG', 'Merkel'],
['Merkel', 'Frankie', 'Lina', 'PG'],
['Lina', 'Frankie', 'Merkel', 'PG']]
Sag uns doch erstmal, was Deine Kriterien für einen "Bestplatzierten" sind. Wer die wenigsten Plätze hat (also die kleinste Summe aller Plätze), oder wer das beste Mittel hat?kaytec hat geschrieben:Mit den oben gezeigten Möglichkeiten kann ich mir die Gesamtwertung aus einem Würfelspiel übergeben lassen. Diese möchte ich nun auswerten und nach der Anzahl der Plätze bzw. "Bestplatzierten " ausgeben. Ich bekomme aber nicht eine sinvolle Sortierung bzw. Umwandlung hin!?
Code: Alles auswählen
gesamt_wertung = [['Frankie', 'Merkel', 'PG', 'Lina'],
['Lina', 'Frankie', 'PG', 'Merkel'],
['Merkel', 'Frankie', 'Lina', 'PG'],
['Lina', 'Frankie', 'Merkel', 'PG']]
lSpieler = gesamt_wertung[0]
dWertung = dict([(sSpieler, []) for sSpieler in lSpieler])
for lGame in gesamt_wertung:
for sSpieler in lSpieler:
dWertung[sSpieler].append(lGame.index(sSpieler) + 1)
lWertung = sorted([(lPlaetze, sName) for sName, lPlaetze in dWertung.items()],
key=lambda (lPlaetze, sName): (sum(lPlaetze), sName))
for iRang, (lPlaetze, sName) in enumerate(lWertung):
print "%i. Rang: %s mit Plaetzen %s"%(iRang+1, sName, ", ".join(map(str, sorted(lPlaetze))))
Entweder war es gestern zu spät und heute ist es einfach noch zu früh für mich, oder kapiere das einfach nicht.kaytec hat geschrieben:Die Listen stehen in richtiger Reihenfolge - Der Gewinner ist immer am Anfang und die Plätze zählen nach Platz in der Liste. Bei diesem Beispiel sind 4 Spiele gamacht worden. Die Bindung an den Platz [ 1, 2, 3, 4] ist eigentlich nicht relevant, doch für die Auswertung evt. einfacher, denn so habe ich z.B. bei zip() schon die Bindung an die Plätze und muß diese nicht erst so sortieren. Meine Frage ist : Ich möchte eine sinnvolle Sortierung erzeugen, um eine verwertbare list() dict() etc. zu haben, die ich dann ausgeben kann.
Code: Alles auswählen
namen = ['Frankie', 'Merkel', 'PG', 'Lina']
gesamt_wertung = [['Frankie', 'Merkel', 'PG', 'Lina'],
['Lina', 'Frankie', 'PG', 'Merkel'],
['Merkel', 'Frankie', 'Lina', 'PG'],
['Lina', 'Frankie', 'Merkel', 'PG']]
plaetze_gesamt_wertung = list()
platz_einzel_wertung = list()
zaehler = 1
for name in namen:
for einzel_wertung in gesamt_wertung:
for spieler in einzel_wertung:
if name == spieler:
platz_einzel_wertung.append(zaehler)
zaehler += 1
zaehler = 1
plaetze_gesamt_wertung.append(sorted(platz_einzel_wertung))
platz_einzel_wertung = list()
for name, platz in sorted(zip(namen,plaetze_gesamt_wertung), key=lambda x: x[1]):
print str(zaehler) + ' Platz fuer ' + name
print '--> Plaetzen in den Einzelspielen ' + '|'.join(str(i) for i in platz)
zaehler += 1
Code: Alles auswählen
def main():
gesamt_wertung = [['Frankie', 'Merkel', 'PG', 'Lina'],
['Lina', 'Frankie', 'PG', 'Merkel'],
['Merkel', 'Frankie', 'Lina', 'PG'],
['Lina', 'Frankie', 'Merkel', 'PG']]
#
# Abbildung von Namen auf eine Liste von Plätzen in den Einzelspielen.
#
name2plaetze = dict()
for wertung in gesamt_wertung:
for platz, spieler in enumerate(wertung):
name2plaetze.setdefault(spieler, list()).append(platz + 1)
#
# Die Plätze der Einzelspiele sortieren.
#
for plaetze in name2plaetze.itervalues():
plaetze.sort()
#
# Daraus eine sortierte Gesamtplazierung erstellen. Die Eintraege
# haben die Form ([<plaetze>,...], 'name').
#
plaetze_sortiert = sorted((plaetze, name)
for name, plaetze in name2plaetze.iteritems())
#
# Und ausgeben...
#
for gesamt_platz, (plaetze, name) in enumerate(plaetze_sortiert):
print '%3d Platz fuer %s' % (gesamt_platz + 1, name)
print '--> Plaetze in den Einzelspielen', '|'.join(map(str, plaetze))
Code: Alles auswählen
plaetze_sortiert = sorted((plaetze, name)
for name, plaetze in name2plaetze.iteritems())
sorted(zip(namen,plaetze_gesamt_wertung), key=lambda x: x[1])