您正在寻找
itertools.compress:
>>> from itertools import compress>>> list_a = [1, 2, 4, 6]>>> fil = [True, False, True, False]>>> list(compress(list_a, fil))[1, 4]
时序比较(py3.x):
>>> list_a = [1, 2, 4, 6]>>> fil = [True, False, True, False]>>> %timeit list(compress(list_a, fil))100000 loops, best of 3: 2.58 us per loop>>> %timeit [i for (i, v) in zip(list_a, fil) if v] #winner100000 loops, best of 3: 1.98 us per loop>>> list_a = [1, 2, 4, 6]*100>>> fil = [True, False, True, False]*100>>> %timeit list(compress(list_a, fil)) #winner10000 loops, best of 3: 24.3 us per loop>>> %timeit [i for (i, v) in zip(list_a, fil) if v]10000 loops, best of 3: 82 us per loop>>> list_a = [1, 2, 4, 6]*10000>>> fil = [True, False, True, False]*10000>>> %timeit list(compress(list_a, fil)) #winner1000 loops, best of 3: 1.66 ms per loop>>> %timeit [i for (i, v) in zip(list_a, fil) if v] 100 loops, best of 3: 7.65 ms per loop
不要
filter用作变量名,它是一个内置函数。



