фильтрация списка по булевым значениям
Я знаю, что в 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]