У меня есть список значений, которые мне нужно отфильтровать по значениям в списке логических значений:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Я создаю новый отфильтрованный список со следующей строкой:
filtered_list = [i for indx,i in enumerate(list_a) if filter[indx] == True]
что приводит к:
print filtered_list
[1,4]
Линия работает, но выглядит (для меня) немного излишне, и мне было интересно, есть ли более простой способ добиться того же.
Советы
Резюме двух хороших советов, приведенных в ответах ниже:
1- Не называйте список filter
, как я сделал , потому что это встроенная функция.
2- Не сравнивайте вещи с тем, True
что делал я, if filter[idx]==True..
потому что в этом нет необходимости. Достаточно просто использовать if filter[idx]
.
if filter[indx] == True
Do ли не использовать , ==
если вы хотите , чтобы проверить идентичность с True
, использованием is
. В любом случае в этом случае все сравнение бесполезно, вы можете просто использовать if filter[indx]
. И наконец: никогда не используйте имя встроенного в качестве имени переменной / модуля (я имею в виду имя filter
). Используя что-то вроде included
, чтобы if
хорошо читалось ( if included[indx]
).