2

我正在尝试编写一个函数,该函数打开一个包含名称、城市和数字列表的文件,并按城市取数字的平均值。

到目前为止,我有类似的东西:

numbers = 0
count = 0
n = 0
while n < len(file):
    for item in file:
        if item.split(' ')[-2] == city:
            count += 1
            numbers += float(item.split(' ')[-1])
            n += 1
        else:
            n += 1
    return numbers / count

其中[-2]是城市的位置,[-1]是数字的位置。假设文件已经打开。

我的代码贯穿整个文件,只返回最后一行的内容。因此,如果文件的最后一行有来自伦敦的人,而我正在尝试为伦敦平均,它只会给我一个数字;如果我试图为其他城市平均,它不会返回任何东西。

为什么它会遍历整个文件而不更新我的计数,我该如何解决?

编辑:

编辑代码,文件如下所示:

NAME1     COUNTRY     CITY     NUMBER

在每一行。

4

1 回答 1

1

首先 item.split(' ') 产生如下内容:

['foo', '', '', '', '', 'spam', '', 'foo', '', '666'] 

如果一行中有多个空格。利用item.split()

其次,文件对象具有迭代接口,因此可以通过这种方式迭代文件行:

for line in open('city.dat'):
    data = line.split()
    if data[-2] == 'CITYNAME':
       count += 1
       numbers += float(data[-1])

第三,确保您的文件中存在“CITYNAME”

为了防止不必要的文件读取和拆分,最好将准备好的数据存储在内存中:

data = map(lambda x: x.split(), open('city.dat'))

并在需要时对其进行过滤:

filtered_cities = filter(lambda x: x[-2] == 'CITYNAME', data)
于 2012-11-04T07:52:29.967 回答