2014-11-08 2 views
0

Я пытаюсь отделить файл данных от списков в зависимости от того, в какой день (или эпоху) данные были сделаны. Я пытаюсь сделать это, сообщив программе, что если эпоха одной точки совпадает с предыдущей точкой, добавьте ее в список, а если нет, то перейдите к ней. В настоящее время я получаю сообщение об ошибке:Integer/Float Typeerror в Python

линия 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 

Не могу решить, что мне нужно изменить! Заранее спасибо.

+0

Try бросить я в целое> if epoch [int (i)] == epoch [int (i) +1]: –

ответ

1

Вы кладете поплавок в списке с этим Python не линиями-может работать с ними для индексов, поскольку они не являются определенными значениями:

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

ошибка говорит вам все, что вам нужно знать. Просто бросить i к int:

i = int(epoch[0]) 
1

Эта строка хранит значения в epoch как поплавки:

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

Затем вы пытаетесь получить доступ к epoch, используя первое значение epoch:

i = epoch[0] 
if epoch[i] == epoch[i+1]: 

Ошибка говорит вам, что вы не можете использовать float в качестве dex для доступа к списку. Таким образом, вам нужно либо сохранить значение int в epoch, либо передать его int перед тем, как использовать его в качестве индекса.

0

В этой строке:

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

Вы бросаете все детали к проплывает перед добавлением в список эпохи.

Так что ваша инициализация индекса я:

i = epoch[0] 

будет всегда содержать поплавки, которые не допускаются в качестве индекса (2,5 не имеет смысла в качестве индекса).

Что вам нужно сделать, это просто отбрасывать указательный я к целочисленным:

i = int(epoch[0]) 
0

Заменить:

i = epoch[0] 

по:

i = 0