2013-10-04 3 views
2

Сначала я использую python 2 дня и задаю больше вопросов. Ниже одного из них.цикл от начала до конца

У меня есть список (3297 пунктов), я хочу найти индекс первого элемента с конца, где значение = 'Nan'

Пример: (индекс, значение)

[0] 378.966 
[1] 378.967 
[2] 378.966 
[3] 378.967 
.... 
.... 
[3295] 777.436 
[3296] nan 
[3297] nan 

если хотите найдено элемент с индексом - 3295

мой код (от конца к началу, шаг за шагом)

i = len(lasarr); #3297 
    while (i >= 0): 
      if not math.isnan(lasarr[i]): 
        method_end=i # i found ! 
        break  # than exit from loop 
      i=i-1 # next iteration 

бега и получить эр ROR

Traceback (most recent call last): 
    File "./demo.py", line 37, in <module> 
    if not math.isnan(lasarr[i]): 
IndexError: index out of bounds 

, что я сделал не так?

ответ

2

Вы начинаете за последним пунктом в списке. Рассмотрим

>>> l = ["a", "b", "c"] 
>>> len(l) 
3 
>>> l[2] 
'c' 

индексы Список нумеруются, начиная с 0, так l[3] поднимает IndexError.

i = len(lasarr)-1 

исправления это.

2

Является ли ваш код повышением IndexError? Он должен ;-) lasarr имеет 3297 предметов, lasarr[0] - lasarr[3296] включительно. lasarr[3297] is не часть списка: это позиция одна за ее пределами. Начните свой код, как это вместо:

i = len(lasarr) - 1 

Тогда i индекс, что последний элемент списка.

-1

Как ваш список довольно короткий, просто процеживают и взять последний пункт (и его индекс):

l = ['a', 'b', 'nan', 'c', 'nan'] 
lastindex = [x for x in enumerate (l) if x [1] != 'nan'] [-1] [0] 
print (lastindex) 
0

Вы, начиная с неправильной позиции, запуска индексации массива от 0, так где ты имеют i = len(lasarr) -1.

lasarr = [378.966, 378.967, 378.968, 378.969, nan] 

for i in range(len(lasarr) - 1, -1,-1): 
    if not math.isnan(lasarr[i]): 
     break 
+0

У вас есть ошибка кода в коде и ваше решение неверное. Ваш метод находит первый индекс, в котором находится 'nan', ** не ** последнее число с конца, которое не является значением' nan'. –

+0

Упс, спасибо, я читал это неправильно :) –

Смежные вопросы