2012-03-25 17 views
5

So habe ich diese Listen:Minimale, maximale und durchschnittliche Werte für verschachtelte Listen finden?

Player1 = ["Ryan", 24, 19] 
Player2 = ["Jamie", 22, 24] 
Player3 = ["Alicia", 17, 15] 
Player4 = ["Dominique", 13, 11] 
Player5 = ["Michael", 18, 23] 

PlayerList = [Player1, Player2, Player3, Player4, Player5] 

Das Format ist [Name des Spielers, erster Runde Punktzahl, zweiter Runde Punktzahl]

Wie man einen Code schreiben, den höchsten Wert, sowie den Durchschnitt zu finden für erste und zweite Punkte jeweils?

EDIT: Ich glaube, ich könnte den ‚Namen der Spieler mit der höchsten Punktzahl‘ statt der ‚höchsten Punktzahl‘ drucken muß, aber ich weiß nicht, wie das zu tun: \

+4

Nur zu sagen, aber es könnte Zeit sein, eine 'Player' Klasse zu schreiben. –

+0

Was ist, wenn es eine Höchstpunktzahl gibt ...? – fraxel

+1

... oder zumindest ein Tupel, es ist konzeptionell passender als eine Liste. – tokland

Antwort

9

Höchsten Wert:

max(max(p[1:]) for p in PlayerList) 

Niedrigster Wert:

min(min(p[1:]) for p in PlayerList) 

Durchschnitt für jeden Spieler ::

[float(p[1] + p[2])/2 for p in PlayerList] 

ETA: Per Ihrem Kommentar, der Name des Spielers mit der höchsten Punktzahl:

max(PlayerList, key=lambda p: max(p[1:]))[0] 
+0

Sie könnten einfach 'max (max (p [1:]) für p in der PlayerList)' 'aufrufen. – kennytm

+0

Wahr, und als Generator wäre das (etwas) schneller –

+0

@KennyTM Gibt es eine Möglichkeit, dass ich den Namen des Spielers drucken kann, der die höchste Punktzahl hat? – DarsAE

1

Max und min:

>>> max(PlayerList, key=lambda p: max(p[1:])) 
['Ryan', 24, 19] 
>>> min(PlayerList, key=lambda p: min(p[1:])) 
['Dominique', 13, 11] 

Durchschnitt ist ein bisschen dreckige:

>>> [(p[0], sum(p[1:])/2.) for p in PlayerList] 
[('Ryan', 21.5), ('Jamie', 23.0), ('Alicia', 16.0), ('Dominique', 12.0), ('Michael', 20.5)] 
1

Um die Spieler mit der höchsten und niedrigsten Punktzahl in jeder Runde zu finden:

(max_score, max_player) = max((max(a, b), player) for (player, a, b) in players) 
(min_score, min_player) = min((min(a, b), player) for (player, a, b) in players) 

Wenn Sie stattdessen die Spieler mit den höchsten und niedrigsten Gesamtergebnissen möchten, ersetzen Sie einfach max(a, b) und min(a, b) durch a + b.

Beachten Sie, dass dies einen einzelnen besten/schlechtesten Spieler auswählt, auch wenn es einen Gleichstand gibt.

Um Mittelwerte der ersten und zweiten Partituren zu finden:

avg_round1 = float(sum(a for (_, a, _) in players))/len(players) 
avg_round2 = float(sum(b for (_, _, b) in players))/len(players) 
Verwandte Themen