фильтрация списка по булевым значениям

Я знаю, что в R есть такой трюк, когда имеется список s=[1,2,3,4] и к нему добавляя список из булевых значений, можно получить нужные элементы. Например, s=[1,2,3,4][True,False,False,True] выдаст результат [1,4]. Можно ли сделать так в питоне с помощью встроенных функций, не прибегая к пандас и др библиотекам?


Ответы (2 шт):

Автор решения: strawdog

можно, например, так:

s = [1,2,3,4]
b = [True,False,False,True]
res = [x[0] for x in zip(s,b) if x[1]]
print(res)

[1, 4]

или так:

s = [1,2,3,4]
b = [True,False,False,True]
res = [s[i] for i, e in enumerate(b) if e]
print(res)

[1, 4]

→ Ссылка
Автор решения: extrn

Если не считать itertools внешней библиотекой (и не стоит ее считать таковой)

>>> list(itertools.compress([1,2,3,4], [True,False,False,True]))
[1, 4]
→ Ссылка