Во втором filter
вы используете list
в качестве предиката (в отличие от bool
, как в первом filter
);теперь это неявно применяет встроенный метод bool
к каждому элементу list
, а для списка l
, bool(l)
истинно именно тогда, когда l
непусто:
In [4]: bool([])
Out[4]: False
In [5]: bool(['a'])
Out[5]: True
Это позволяет вам выбирать, например, все непустые списки в списке списков:
In [6]: ls = [['a'], [], ['b']]
In [7]: list(filter(lambda l: l, ls))
Out[7]: [['a'], ['b']]
Таким образом, в вашем случае, в конце дня, ваш filter
заканчивается тем, что дает вам все списки, для которых появляется 'four'
, и это все они.
Из вашего приведенного примера не сразу очевидно, чего вы пытаетесь достичь, так как все входные данные идентичны, но я думаю,это что-то вроде следующего:
In [19]: multiArray = [
...: ['one', 'two', 'three', 'four', 'five', 'four'],
...: ['one', 'two', 'three', 'for', 'five'],
...: ['one', 'two', 'three', 'four', 'five']
...: ]
In [20]: [list(filter(lambda x: x == search, l)) for l in multiArray]
Out[20]: [['four', 'four'], [], ['four']]