Python中的Integer / Float Typeerror

时间:2014-11-08 16:37:03

标签: python floating-point int typeerror

我正在尝试将数据文件分成列表,具体取决于采集数据的日期(或纪元)。我试图通过告诉程序如果一个点的纪元与前一个点相同,将其添加到列表中,如果没有那么继续前进。我目前收到错误:

第31行,

    if epoch[i] == epoch[i+1]:
TypeError: list indices must be integers, not float

这就是我现在拥有的东西(我还没有写下这一点,告诉它进入下一个时代)。

epoch=[]
wavelength=[]
flux=[]


text_file = open("datafile.dat", "r")
lines1 = text_file.read()
#print lines1
text_file.close()

a = [float(x) for x in lines1.split()]

a1=0
a2=1
a3=2

while a1<len(a):
    epoch.append(float(a[a1]))
    wavelength.append(float(a[a2]))
    flux.append(float(a[a3]))
    a1+=3                                                               
    a2+=3
    a3+=3

#print epoch
x=[]
y=[]
z=[]

i = epoch[0]
if epoch[i] == epoch[i+1]:
    x.append(epoch[i])
    y.append(wavelength[i])
    z.append(flux[i])
    i+=1
    #print x
    #print z

我无法解决我需要改变的问题!提前谢谢。

4 个答案:

答案 0 :(得分:1)

你在这个行的列表中放了一个浮点数 - Python不能用于索引,因为它们不是明确的值:

epoch.append(float(a[a1]))

错误告诉您需要知道的一切。只需将i投射到int

即可
i = int(epoch[0])

答案 1 :(得分:1)

此行将epoch中的值存储为浮点数:

epoch.append(float(a[a1]))

然后,您尝试使用epoch的第一个值

来访问epoch
i = epoch[0]
if epoch[i] == epoch[i+1]:

错误告诉您不能使用float作为索引来访问列表。因此,您需要将值int存储在epoch中,或者在将其用作索引之前转换为int

答案 2 :(得分:0)

在这一行:

epoch.append(float(a[a1]))

在追加到列表纪元之前,您将所有项目都投射到浮点数。

所以你初始化索引i:

i = epoch[0]

将始终包含不允许作为索引的浮点数(2.5作为索引没有意义)。

您需要做的只是将索引i转换为整数:

i = int(epoch[0])

答案 3 :(得分:0)

替换:

i = epoch[0]

by:

i = 0