查找嵌套列表的最小值,最大值和平均值?
问题描述:
所以我有这些列表:查找嵌套列表的最小值,最大值和平均值?
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]
格式为[玩家的名字,第一轮成绩,第二轮成绩]
如何编写代码,找出最高值,以及平均分别获得第一和第二分数?
编辑:我想我可能需要“得分最高的球员的名字”打印,而不是“最高分”,但我不知道该怎么做:\
答
最高值:
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]
答
最大值和最小值:
>>> 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)]
答
要找到任何一轮中得分最高和最低的球员:
(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)
只是说,但它可能是时间来写一个'Player'类。 – 2012-03-25 08:49:45
如果最高得分相同......? – fraxel 2012-03-25 09:42:46
...或者至少是一个元组,它在概念上比列表更合适。 – tokland 2012-03-25 09:42:59