我有一个包含这样的元组的列表。每个元组都是棒球运动员,然后是该玩家的统计数据。 **请注意,列表中的多个元组(实际列表比这个大得多)可能包含相同的播放器,但具有来自不同棒球游戏的统计数据。
[('Jimmy Brown', '4', '0', '0'), ('Jimmy Brown', '4', '1', '1'), ('Stu Martin', '5', '0', '0'), ('Enos Slaughter', '3', '2', '1'), ('Stu Martin', '3', '1', '1')]
我想为每个玩家做计算。在上面的示例列表中,我可能想要计算Jimmy Brown的第三个索引的平均值。所以我想要(0 + 1)/ 2。我怎么能做到这一点?
答案 0 :(得分:0)
在上面的示例列表中,我可能想要计算平均值 吉米·布朗的第三个指数。
请注意,您必须仅为包含Jimmy Brown的元组过滤列表。
l = [('Jimmy Brown', '4', '0', '0'), ('Jimmy Brown', '4', '1', '1'), ('Stu Martin', '5', '0', '0'), ('Enos Slaughter', '3', '2', '1'), ('Stu Martin', '3', '1', '1')]
cumulative = 0
num =0
for t in l:
if t[0]=='Jimmy Brown':
cumulative += t[3]
num +=1
return cumulative/float(num)
答案 1 :(得分:0)
您可以使用itertools.groupby
根据元组中的第一个元素对内部元组进行分组,然后为每个内部组获取所需的平均值。示例 -
from itertools import groupby
from operator import itemgetter
for i,grp in groupby(sorted(lst),key=itemgetter(0)):
grplst = list(grp)
print(i," - ", sum(float(x) for _,_,x,_ in grplst)/len(grplst))
演示 -
>>> lst = [('Jimmy Brown', '4', '0', '0'), ('Jimmy Brown', '4', '1', '1'), ('Stu Martin', '5', '0', '0'), ('Enos Slaughter', '3', '2', '1'), ('Stu Martin', '3', '1', '1')]
>>> from itertools import groupby
>>> from operator import itemgetter
>>> for i,grp in groupby(sorted(lst),key=itemgetter(0)):
... grplst = list(grp)
... print(i," - ", sum(float(x) for _,_,x,_ in grplst)/len(grplst))
...
Enos Slaughter - 2.0
Jimmy Brown - 0.5
Stu Martin - 0.5
答案 2 :(得分:-1)
l = [('Jimmy Brown', '4', '0', '0'), ('Jimmy Brown', '4', '1', '1'), ('Stu Martin', '5', '0', '0'), ('Enos Slaughter', '3', '2', '1'), ('Stu Martin', '3', '1', '1')]
l_jimmy = [ float( item[ 2 ] ) for item in l if item[ 0 ] == 'Jimmy Brown' ]
# or via map/filter:
l_jimmy = map( lambda x: float( x[ 2 ] ), filter( lambda x: x[ 0 ] == 'Jimmy Brown', l ) )
# final calculation
avg = sum( l_jimmy ) / len( l_jimmy )