In python -3.x , filter
является ленивым . Это означает, что если вы позвоните filter(lambda x:(x % 6 == 1) or (x%3 != 1), L)
, он не будет ничего делать . Он просто создаст filter
объект, но не отфильтрует итерируемое вообще.
Только когда вы итерируете по этому объекту, он начнет перечислять по базовому источнику, и каждый раз пытайтесь найти следующий элемент этого источника, который удовлетворяет данному предикату.
Итак, построение a filter
выполняется за постоянное время. Однако если вы используете что-то вроде list(..)
, которое материализует список, мы получим за 10 прогонов:
>>> timeit(lambda: list(filter(lambda x:(x % 6 == 1) or (x%3 != 1), L)), number=10)
2.855049993000648
, поэтому в среднем для фильтрации всего списка требуется 0,2855 секунд L
.