1

我有一个较大的列表列表(从 CSV 导入),带有标题行。包括标题在内的前三行如下所示。每行中有更多元素,但为了便于阅读,我已将其截断。

[('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'), 
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0')... ]

这是我在 excel 中拥有/拥有的一个爱好足球统计数据包,并且想要基于网络,所以当我学习 python 时,我有一些真正的工作要做。我有许多要计算的平均值,所以想在每一行中匹配主队,并将我选择的任何列中的值添加到运行总数中,这样我就可以计算出平均值。简单来说,每次主队对阵“切尔西”时,我都想把它加到我的跑分中来计算他们在主场的平均进球数。数据文件非常一致,所以我知道特定变量将始终位于第 4 列、第 5 列或其他列中。

def CalcAverageHome(team, column, data_file):
    total = 0
    count = 0
    for team in data:
        if  data[2] == team:
            print data_file[4]
        #total += data[4]
        count += 1
    else:
       pass
    average = total / 5
    return 
print "Here's the Average"
print CalcAverageHome("Chelsea", 4, data)

当我运行该代码时,它为我提供了第四个列表(顶级列表),即

('E0', '18/08/12', 'QPR', 'Swansea', '0', '5'...

我开始尝试使用itertools,但即使只是迭代列表以将其打印为调试器也不起作用(我想确保它在我去的时候工作)

print "Let's try this with itertools" 
def chain(*iterables):
  for it in iterables:
    print it
    for element in it:
        yield element
        print element
chain(data) 

data是从 CSV 读取数据的变量,列表列表。

但这并没有打印任何东西——我已经查看了它的标准文档,但它并没有透露任何信息。我只是希望能够遍历每个子列表,检查团队是否匹配,如果匹配,则对几个元素的数字做一些事情。我一直在研究这个和各种解决方案大约一天(超过三天),所以我有点沮丧。

4

1 回答 1

0

您只需要遍历我认为的嵌套列表。此外,示例代码中的变量也有误。我认为这行得通

data_file = [('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'),
('E0', '18/08/12', 'Arsenal', 'Sunderland', '4', '0'),
('E0', '18/08/12', 'Arsenal', 'Sunderland', '2', '0'),
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0') ]

def CalcAverageHome(team, column, data_file):
    total = 0
    n=0         # the number of times the team you are looking for is in the data
    for row in data_file:
        if  row[2] == team:
            total += int(row[column])
            n+=1
    try:
        average = float(total) / n  # if u r using python 2.7.Else if 3.2+  just total/n
    except ZeroDivisionError:       # to prevent zerodevisionerror if t team had n games
        average = 'Not played'
    return average

问题是

  • 您使用团队对 data_file 进行迭代,这也是计算函数的参数。因此,在您在 for 循环中使用的 if 检查中,您没有检查您在函数中输入的团队,而是检查中的行您使用 for 循环迭代的数据
于 2013-06-08T11:59:00.170 回答