我目前正在处理一个python问题,涉及一个包含2个数字和标识符子列表的列表,总共有三件事。程序名称为compareTeams(lstTeams),用于计算多个赛季的球队平均胜率。第一个列表是赢得的游戏,第二个列表是游戏丢失。有问题的程序会列出这些列表,并试图通过将赢得的总游戏加起来然后按照列表的长度进行累计来找到最高的平均值。两个列表都具有相同的大小。然后,它按照从最大到最小的顺序对平均值进行排序,将标识符标记为每个列表中的第一个元素。举个例子:
teamA = [[6, 4, 8, 5, 0], [3, 6, 0, 2, 4], 'A'] avg winning percentage = 0.56
(如果我的解释很差且难以理解,对于teamA,百分比计算为(6/9 + 4/10 + 8/8 + 5/7 + 0/4)/ 5)
teamB = [[3, 6, 8, 2, 4], [3, 6, 8, 2, 4], 'B'] avg winning percentage = 0.50
teamC = [[3, 6, 8, 2, 4], [0, 0, 0, 0, 0], 'C'] avg winning percentage = 1
compareTeams([teamA, teamB, teamC]) gives [['C', 1],['A', 0.56],['B', 0.50]]
我已经给了这个问题很多想法,但我是python的新手,所以我不确定我是否正确地调用了所有内容。我正在使用的翻译在我运行时甚至没有显示我的程序,这让我相信我可能做错了什么。这是我的代码:
def compareTeams(lstTeams):
a = 0
x = 0
lst = []
y = lstTeams[a]
for a in range(0, len(y)):
x = x + ((float(y[0][0]) / (y[1][0])) / len(y[0]))
a = a + 1
lst.append(x)
return lst.reverse(lst.sort())
这是对的吗?我做错了吗?任何帮助将不胜感激。
注意:我正在使用python 2.7。
答案 0 :(得分:1)
您可以在此处使用zip
:
def compare_team(teams):
lis = []
for team in teams:
#zip fetches items from the same index one by one from the lists passed to it
avg = sum( (x*1.0)/(x+y) for x,y in zip(team[0],team[1]))/ len(team[0])
lis.append([team[-1],avg])
lis.sort(key = lambda x:x[1],reverse = True) #reverse sort based on the second item
return lis
>>> compare_team(([teamA, teamB, teamC]))
[['C', 1.0], ['A', 0.5561904761904761], ['B', 0.5]]