2016-02-11 4 views
-1

Я написал этот код для простого линейного поиска:Линейный поиск по списку?

def floor(array, target): 
    i = 0 
    while i < len(array): 
     if array[i] == target: 
      print("The target value can be found at index: " + str(array[i])) 
      break 
     else: 
      i = i + 1 

floor([1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13, 14], 5) 

Проблема у меня в том, что он не возвращает значения, которые я хочу. По какой-то причине он не начинает отсчет в 0, поэтому, когда я делаю цель 1, он сообщает мне, что индекс равен 1. Аналогично, если я сделаю цель 4, он даст мне второе значение 4 в индексе 4, а не один в индексе 3. Даже когда цель является более высоким числом, она, по-видимому, только один раз подсчитывает значение 4. Я не уверен, что я делаю неправильно, может кто-нибудь предложить какие-то советы?

+0

Для дальнейшего использования, «индекс» встроенный метод для списков может сделать это для вас. Например, [4,8,15,16,23,42] .index (15) return 2. –

ответ

2

Вы печатаете значение по индексу, т.е. array[i] вместо i.

+0

Geez, я не могу поверить, что не видел этого. Спасибо огромное! – Breelin

0

Вы печатаете значение массива в индексе вместо самого индекса. Это исправляет это. Также рассмотрите возврат вместо инструкции печати.

def floor(array, target): 
    i = 0 
    while i < len(array): 
     if array[i] == target: 
      print("The target value can be found at index: " + str(i)) 
      return i 
     else: 
      i = i + 1 

four_ind = floor([1, 2, 3, 4, 4, 5, 6, 7, 8, 9], 4) # returns 3 
0

попробовать это:

def floor(array, target): 
    for i, value in enumerate(array): 
     if value == target: 
      print('target is in:', i) 

floor([1,2,3,4,5, 4, 4,6], 4) 
Смежные вопросы