У мене є список значень, які мені потрібно відфільтрувати з урахуванням значень у списку булевих:
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]).