Tak działa filter. Bierze anonimową funkcję lambda (lub inną przez nas podstawioną), i podstawia elementy z drugiego obiektu, przechowując wynik.
Polecam spojrzeć w link gdzie to jest fajnie zobrazowane:
http://pythontutor.com/live.html#code=import%20collections%0Adef%20solution%28A%29%3A%0A%20%20%20%20d%20%3D%20collections.Counter%28A%29%20%20%20%20%0A%20%20%20%20d%20%3D%20filter%28lambda%20x%3A%20x%5B1%5D%20%26%201,%20d.items%28%29%29%0A%20%20%20%20d%20%3D%20list%28d%29%20%20%20%20%0A%20%20%20%20return%20d%5B0%5D%5B0%5D%0A%20%20%20%20%0Asolution%28%5B1,1,2,3,3,4,2,5,4%5D%29&cumulative=false&curInstr=24&heapPrimitives=false&mode=display&origin=opt-live.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false
(skrócony: https://goo.gl/6LyXJF )
@Edit:
Filter został w pythonie 3 wywalony z podstawki, z powodu clear code, bo można go zastąpić bardzo łatwo pętlą for + zip'em gdy ma dużą ilość zmiennych ;p.
Przykładowa konwersja:
temp = list[0]
for a in list[1:]:
temp = temp+a
#A z reducem:
reduce(lambda x: x+y, list)
Które jest bardziej pythonowe i właściwe? Różnie ludzie polemizują, wg. mnie nie bez powodu został wywalony w pythonie 3. Ale wielu fanboy'om jednolinijkowców nie przemówisz że filter jest zły, bo pozwala robić cuda :D
Mój błąd, ślepy jestem. Chodziło mi o reduce.