2017-01-05 2 views
0

Я уверен, что это просто, и я смотрю прямо на него, но я не могу заставить его работать.python: loop through list of strings find index указанного элемента

Цель: использовать цикл, чтобы просмотреть список строк и найти поисковый запрос. Верните номер элемента первого совпадения.

Я пробовал несколько вариантов, ничего не работает, и мне еще предстоит найти рабочее описание того, как это сделать в любых текстах.

Это моя лучшая попытка до сих пор: сообщение

def get_element_number(a_list, search_term): 
    for i in range(len(a_list)): 
     if search_term in a_list[i]: 
     return a_list.index(i) 
     elif not search_term in a_list: 
     return 'no match' 

Ошибка:

Traceback (most recent call last): 
File "python", line 11, in <module> 
File "python", line 5, in get_element_number 
ValueError: 2 is not in list 

Не смотря на полный ответ, просто любая помощь в том, где я буду неправильно или если я m пропустить что-то было бы очень полезно.

+0

Можете ли вы предоставить образец '' a_list' и search_term', как сделано в вызове функции? – Chuck

+0

О, извините! get_element_number (['a' ',' b ',' d '],' d ') Я нашел работу, которая будет использоваться с использованием длины списка, но я определенно ценю помощь и реальные ответы! – Megan

ответ

2

Вы можете заменить все это index = a_list.index(search_term).

Обратите внимание, что если список не содержит search_term, он выдает исключение, поэтому вам нужно поймать его и вернуть «не найден» или что-то подобное. Второе примечание: оно возвращает только первый индекс найденного search_term.

+1

Я уже выяснил, что делать для исключения (в основном сломал вызов на части, решил, что я мог, и немного ударил головой по столу). Благодарим вас за помощь! – Megan

3

if search_term in a_list[i]: является True даже если search_term является содержал в a_list[i].

Так что в случае точного соответствия index работает, но в случае частичного совпадения index исключает.

Помимо этого: elif not search_term in a_list: неправ. Удалите его или вы вернетесь сначала без соответствия.

Перепишите как:

def get_element_number(a_list, search_term): 
    try: 
      return a_list.index(search_term) 
    except IndexError: 
      'no match' 

Это проще и имеет преимущество при выполнении поиска только один раз, что очень важно производительность мудрым, когда вы используете линейный поиск (без учета накладных расходов, за исключением учета).

0
for index, s in enumerate(a_list): 
    if s == term: 
    return index 
return -1 
0
def get_element_number(a_list, search_term): 
    for index, value in enumerate(a_list): 
     if search_term in value: 
      return index 
    return 'not match' 
+0

Я читал о перечислении, но я думал, что это работает немного по-другому. Спасибо! – Megan

0

Вот простое изменение вашего кода, который разрешит его:

def get_element_number(a_list, search_term): 
    if search_term in a_list: #if search keyword is in the list 
     return a_list.index(search_term) #then return the index of that 
    else: 
     return 'no match!'