2016-03-22 5 views
1
def find_value_indexes(item_list, index_list, v): 
    """ (list of object, list of int, object) -> list of int 

    Precondition: the values in index_list are valid indexes in item_list. 

    v may appear multiple times in item_list. index_list contains zero or 
    more indexes. 
    Return a list of the indexes from index_list at which v 
    appears in item_list. 

    >>> find_value_indexes([6, 8, 8, 5, 8], [0, 2, 4], 8) 
    [2, 4] 
    """ 

    result = [] 
    for i in range(len(item_list)): 
     for j in range(len(index_list)): 
      if item_list[i] == v: 
       result.append(index_list[j]) 
    return result 

Моя функция не работает, потому что она возвращает больше, чем я должен получить. Что я могу сделать?фильтрация списка по значению и списку индексов

+0

Подумайте, что произойдет, если длина 'index_list' меньше, чем' item_list', т.е. 'i> j'. Что будет 'index_list [i]' печатать, когда значение i больше j? – Kamehameha

ответ

0

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

result = [] 
for i in index_list: 
    if item_list[i] == v: 
     result.append(i) 
return result 

Или, что более элегантно, как один вкладыш с использованием списковых:

return [i for i in index_list if item_list[i] == v] 
+1

Право ..... Большое спасибо! –

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