Python List Comprehension聚合元组数据

时间:2015-02-22 21:26:37

标签: python list list-comprehension

我有一个包含这样的元组的列表。每个元组都是棒球运动员,然后是该玩家的统计数据。 **请注意,列表中的多个元组(实际列表比这个大得多)可能包含相同的播放器,但具有来自不同棒球游戏的统计数据。

[('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。我怎么能做到这一点?

3 个答案:

答案 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 )