请帮助我修复“列表索引超出范围”错误

时间:2019-11-04 13:45:59

标签: python-3.x

我写了一个程序来计算日本每个县的未成年人(年龄在20岁以下)的比率,并且不断产生此错误:第19行的列表索引超出范围:比率=(agerange [1] + agerange [2] + agerange [3] + agerange [4])/人口* 100.0

链接到csv:https://drive.google.com/open?id=1uPSMpgHw0csRx1UgAJzRLit9p6NrztFY

f=open("population.csv","r")
header=f.readline()
header=header.rstrip("\r\n")
while True:
    line=f.readline()
    if line=="":
        break
    line=line.rstrip("\r\n")
    field=line.split(sep=",")

    population=0
    ratio=0
    agerange=[ "pref" ]
    for age in range(1, len(field)):
        agerange.append(int(field[age]))
        population+=int(field[age])
        ratio =(agerange[1]+agerange[2]+agerange[3]+agerange[4])/population*100.0
print(field[0],ratio)

2 个答案:

答案 0 :(得分:0)

在第17行,我假设您要执行以下代码:

ratio =(agerange[0]+agerange[1]+agerange[2]+agerange[3])/population*100.0

下次,请更详细地写下您的错误。

答案 1 :(得分:0)

您可以做的是获取所需年龄范围内的人口总数,然后执行比率计算。

在Python中,您可以使用map函数将可迭代的值转换为int,然后将其转换为import matplotlib.pyplot as plt import numpy as np n = 100 xx = np.arange(0, n) yy = np.random.normal(1, size=(n, 1)) fig = plt.figure() plt.plot(xx, yy) plt.savefig('testpngpicture.png') plt.savefig('testrawpicture.raw', format='raw') plt.show(fig)

有了列表后,就可以在其上或其中一部分使用sum函数。

所以,我想到了:

list

哪个输出(此处仅显示一部分)

f = open("population.csv","r")
header = f.readline()
header = header.rstrip("\r\n")

while True:
    line = f.readline()

    if line == "":
        break

    line = line.rstrip("\r\n")
    field = line.split(sep=",")
    popData = list(map(int, field[1:]))

    youngPop = sum(popData[:4])
    oldPop = sum(popData[4:])

    ratio = youngPop / (youngPop + oldPop)

    print(field[0].ljust(12), ratio)

f.close()

(我不太了解Python,所以可能会有一些“更好”或更常规的方式。)