2015-05-28 2 views
1

Я хочу определить функцию, чтобы узнать индекс списка, который удовлетворяет некоторому условию. Но всегда есть ошибка:Функция python с аргументом list

TypeError: 'int' object is not iterable 

Ниже мой код

def find_index(x,*arr): 
    for i in len(arr): 
     if abs(i-x) < 1e-5: 
      j = arr.index(i) 
      return j 

Как указать аранжировка список или NumPy массив? (Извините, я не знаю, как отформатировать код в этом редакторе)

Большое спасибо.

ответ

4

Проблема (первая) for i in len(arr). len(arr) возвращает целое число, которое не является итерируемым. У вас может быть искушение использовать range(len(arr)), но не сдавайтесь. Есть лучшие варианты! Мы можем отслеживать индекс ценности по мере повторения. Как правило, эта функция, вероятно, выглядеть так:

def find_index(x, arr): 
    for i, val in enumerate(arr): 
     if abs(val - x) < 1.e-5: 
      return i 

Теперь вы можете назвать это на любой итерацию. например .:

find_index(5, [1, 2, 3, 5, 60]) # passing a list 
find_index(5, (0, 5+1e-6, 10)) # passing a tuple 
+0

Просто чтобы прояснить использование 'enumerate':' arr.index (I) 'расточительно, если вы просто хотите знать индекс уже найденного элемента. – bereal

+0

Большое спасибо. Узнайте много от вас. –

0

Вы можете попытаться полюбить:

l=len(arr) 
    for i in range(l) 

i возвращает это целое число, значение .integer не итерацию.

+0

Большое спасибо, я понял. –

0

Я думаю, что вы хотите заменить

for i in len(arr) 

с:

for i in range(len(arr)) 
+0

Большое спасибо. Помогает. –

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