I have a list of values which I need to filter given the values in a list of booleans:
list_a = [1, 2, 4, 6]
filter = [True, False, True, False]
Like so:
filtered_list = [i for (i, v) in zip(list_a, filter) if v]
Using zip
is the pythonic way to iterate over multiple sequences in parallel, without needing any indexing. This assumes both sequences have the same length (zip stops after the shortest runs out). Using itertools
for such a simple case is a bit overkill ...
One thing you do in your example you should really stop doing is comparing things to True, this is usually not necessary. Instead of if filter[idx]==True: ...
, you can simply write if filter[idx]: ...
.