Python, перебирающий списки

1

Рассмотрим приведенные ниже списки

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

элементы в result вычисляются для каждого фильтра в filters. Бывает, что фильтры u, g, z не вернули никаких результатов. Поэтому я хотел бы повторно вычислить значения result[0], result[2], result[4],, используя фильтры, возвращающие значения.

Моя проблема заключается в повторении обоих списков и использовании фильтра шкафа для вычисления значения, отсутствующего в результате. например, result[0] следует вычислять с использованием 'i' (i ближе всего к u) result[2], мы также используем 'i' not 'z' и result[3], мы используем 'z'. Как обобщить это? (фильтры фиксированы, но элементы в значениях меняются.) Я бы хотел получить кортеж с двумя фильтрами (filter_missing_a_value_in_results, filter_to_used_to_computer_the_missing_value)

  • 0
    Что произойдет с result[2] если заполнить result[3] ?
  • 0
    Любой ближайший фильтр может быть использован до или после
Показать ещё 2 комментария
Теги:
list
loops

1 ответ

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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню