Не особо элегантно но тем не менее:
>>> ls
[1, 1, 1, 1, 3, 4, 5, 6, 12, 4, 5]
>>> b=[]
>>>
def prn(b,n,x):
b.append(x)
return (n>1) and prn(b,n-1,x)
>>> filter(lambda x: ((x in ls) and prn(b,ls.count(x),x)),range(max(ls)+2))
[]
>>> b
[1, 1, 1, 1, 3, 4, 4, 5, 5, 6, 12]
>>>
Хотелось бы конечно написать “однострочник” ну или на худой конец обойтись без def и использовать только lambda. Использование count тоже является мелким читерством - уж тогда и ls.sort можно было использовать =) Однако ls.cout можно реализовать внешним(по отношению к исходному выражению:
filter(lambda x: ((x in ls) and prn(b,ls.count(x),x)),range(max(ls)+2))
) следующим образом - идея вот:
>>> x=1
>>> len(filter(lambda y:y==x,ls))
p.s. Джентельмены поделитесь разными трюками которые вы знаете - мне очень интересно =)
p.p.s А как на питоне выглядит программа печатающая свой исходный код?