У мене є список значень, які мені потрібно відфільтрувати з урахуванням значень у списку булевих:
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
Є чи НЕ використовувати , ==
якщо ви хочете , щоб перевірити ідентичність з True
, використанням is
. У будь-якому випадку все порівняння марне, ви можете просто скористатися if filter[indx]
. Нарешті: ніколи не використовуйте ім’я вбудованого в якості назви змінної / модуля (я маю на увазі ім'я filter
). Використовуючи щось на зразок included
, щоб if
читати було добре ( if included[indx]
).