列表python的一部分 - 引用特定位置/切片子列表

时间:2013-06-08 11:23:02

标签: python list slice nested-lists itertools

我有一个很大的列表列表(从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数据的变量,即列表列表。

但这并没有打印任何东西 - 我已经看过它上面的标准文档,但它并没有消除任何影响。我只是希望能够遍历每个子列表,检查团队是否匹配,如果是,则使用数字中的一些元素做一些事情。我一直在看这个和各种解决方案大约一天(超过三天),所以我有点沮丧。

1 个答案:

答案 0 :(得分: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

问题是

  • 你使用 team 来迭代data_file,这也是calculate函数的参数。所以你在for循环中使用的if检查中,你没有检查您在函数中输入的团队,而是检查使用for循环迭代的数据中的行