2012-03-25 20 views
5

だから私はこれらのリストを持っている:ネストされたリストの最小値、最大値、平均値の検索

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] 

形式が最高値を見つけるためのコードと同様に、平均値を書くためにどのように[プレイヤーの名前、最初のラウンドのスコア、第二ラウンドのスコア]

です第1スコアと第2スコアのそれぞれについて?

編集:私は、私が代わりに「最高得点」「最高得点と選手の名前」印刷する必要があるかもしれないと思うが、私はそれを行う方法がわからない:

+4

だけ言って、 'Player'クラスを記述するための時間であるかもしれない:第一および第二のスコアの平均値を検索するに

。 –

+0

結ばれた最高得点がある場合はどうなりますか? – fraxel

+1

...少なくともタプルでは、​​概念的にはリストよりもフィットします。 – tokland

答えて

9

最高値\:

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

最低値:各プレイヤーのための

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

平均値::

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

ETA:あなたのコメントパー、スコアが最も高いプレイヤーの名前:

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

PlayerListの 'p(' max(p [1:]) ')を呼び出すことができます。 – kennytm

+0

真実でジェネレータとして(少し速く) –

+0

@KennyTM最高得点のプレイヤーの名前を印刷する方法はありますか? – DarsAE

1

最大と最小:

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

平均は少し汚いです:

>>> [(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

どのラウンドでも最高得点と最低得点を持つ選手を探すには:

(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) 

最高得点と最低得点のプレーヤーを希望する場合は、とmin(a, b)a + bに置き換えてください。

これは、ネクタイがあっても最高の/最悪のプレイヤーを1人選ぶことに注意してください。

avg_round1 = float(sum(a for (_, a, _) in players))/len(players) 
avg_round2 = float(sum(b for (_, _, b) in players))/len(players) 
関連する問題