2016-03-22 69 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',会发生什么情况。当i的值大于j时,'index_list [i]'会打印什么? – 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

对不起.....非常感谢! –