繁体   English   中英

列表列表python-引用特定位置/切片子列表

[英]LIst of lists python - referencing particular locations / slicing sublists

我有一个很大的列表列表(从CSV导入),带有标题行。 前三行(包括标题)如下所示。 每行中都有很多元素,但是出于可读性考虑,我已将其截断。

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

这是我在Excel中拥有/拥有的业余爱好足球统计数据包,并且希望使其基于Web,因此在学习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数据(列表列表)读入的变量。

但这并不能打印任何内容-我已经看过它的标准文档,但是并没有减少任何麻烦。 我只是希望能够遍历每个子列表,检查团队是否匹配,如果匹配,则对一些元素进行编号。 我已经大约一天(超过三天)一直在研究这个和各种解决方案,所以我有点沮丧。

我只需要遍历嵌套的列表,示例代码中的变量也有误。 我认为这有效

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循环迭代的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM