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 

İşleçim işe yaramazdı, çünkü almam gereken şeyden daha fazlasını döndürüyor. Ne yapabilirim?Bir listeyi dizinlere ve dizinlere göre filtreleme

+0

Eğer 'index_list' uzunluğunun 'item_list' yani' i> j''den küçük olması durumunda ne olacağını düşünün. Index_list [i] 'i, i'nin değeri j'den daha fazla olduğunda ne yazdı? – Kamehameha

cevap

0

Sen item_list yineleme gerekmez - sadece item_list için endeksler olarak unsurlarını index_list yineleme ve kullanımı:

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

Ya da daha zarif, bir tek satırlık kullanarak liste comprehensions olarak:

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

Doğru ..... Çok teşekkür ederim! –

İlgili konular