2012-03-25 173 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] 

格式爲[玩家的名字,第一輪成績,第二輪成績]

如何編寫代碼,找出最高值,以及平均分別獲得第一和第二分數?

編輯:我想我可能需要「得分最高的球員的名字」打印,而不是「最高分」,但我不知道該怎麼做:\

+4

只是說,但它可能是時間來寫一個'Player'類。 – 2012-03-25 08:49:45

+0

如果最高得分相同......? – fraxel 2012-03-25 09:42:46

+1

...或者至少是一個元組,它在概念上比列表更合適。 – tokland 2012-03-25 09:42:59

回答

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中調用'max(max(p [1:])p')。 – kennytm 2012-03-25 08:21:14

+0

確實如此,並且作爲一個稍微快一點的發生器 – 2012-03-25 08:22:59

+0

@KennyTM有沒有什麼方法可以打印得分最高的玩家的名字? – DarsAE 2012-03-25 08:41:23

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) 

如果您希望獲得總分最高和最低的選手,只需將max(a, b)min(a, b)替換爲a + b即可。

請注意,即使有領帶,這也會選出一個最佳/最差的選手。

要找到第一和第二分數的平均值:

avg_round1 = float(sum(a for (_, a, _) in players))/len(players) 
avg_round2 = float(sum(b for (_, _, b) in players))/len(players) 
相關問題