2016-03-22 15 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

右.....ありがとうございました! –

関連する問題