2011-05-05 107 views
1

迭代考慮下面蟒通過列表

filters= [u, i, g, r, z] 
result = [None, 34, None, None, 45] 

列表中result項目被計算爲在filters每個過濾器。發生過濾器,u, g, z沒有返回任何結果。所以我想用返回值的過濾器重新計算result[0], result[2], result[4],的值。

我的問題是遍歷兩個列表,並使用closet過濾器來計算結果中缺少的值。 e.g result[0]應使用'i'計算(i最接近uresult[2]我們還可以使用'i''z'result[3]我們使用'z'。如何推廣這? (過濾器是固定的,但值的項目不斷變化。)我想得到的是兩個過濾器,(filter_missing_a_value_in_results,filter_to_used_to_computer_the_missing_value)

+0

將與發生什麼'結果[2]'如果結果[3]'被填充了? – 2011-05-05 11:57:13

+0

任何最接近的過濾器都可以在 – user739807 2011-05-05 12:00:37

+3

之前或之後使用。不能有「之前或之後」。你需要定義你的行爲。 – 2011-05-05 12:01:24

回答

1

沒有特別有效的解決方案的元組:

def filters_by_distance(i): 
    '''Generate filters by distance from i''' 
    sorted_indices = sorted(range(len(filters)), key=lambda j: abs(j-i)) 
    return (filters[j] for j in sorted_indices)