Собственно, почему приходится городить вот такую конструкцию:
b = ''.join(list(filter(lambda c: c.islower() or c.isdigit(), a)))
вместо
b = str(filter(lambda c: c.islower() or c.isdigit(), a))
Ну и вдогонку, зачем не ленивому языку вдруг понадобились ленивые по-умолчанию функции?
Я не холивара ради, мне правда интересны причины такого на мой взгляд не самого удачного дизайна.