Задать вопрос
@devpony

Почему filter object не приводится к str в python?

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

вместо
b = str(filter(lambda c: c.islower() or c.isdigit(), a))


Ну и вдогонку, зачем не ленивому языку вдруг понадобились ленивые по-умолчанию функции?
Я не холивара ради, мне правда интересны причины такого на мой взгляд не самого удачного дизайна.
  • Вопрос задан
  • 1358 просмотров
Подписаться 2 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@abcd0x00
Собственно, почему приходится городить вот такую конструкцию:

А зачем ты результат фильтрации приводишь к list()?
>>> b = ''.join(filter(None, 'abcde'))
>>> b
'abcde'
>>>
Ответ написан
Комментировать
Sly_tom_cat
@Sly_tom_cat
.
А зачем вообще что-то преобразовывать?

>>> filter(lambda c: c.islower() or c.isdigit(), 'asd123ASD!@#')
'asd123'

В описании filter четко описано : If iterable is a string or a tuple, the result also has that type;
Но это если у вас 'a' - строка. Если 'a' - список - то вы сначала его в строку преобразуйте.

Но это верно для второго питона - в третьем filter это не функция, а итератор, которые нужно обработать прежде чем получишь строку:

>>> ''.join(filter(lambda c: c.islower() or c.isdigit(), 'asd123ASD!@#'))
'asd123'
>>>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы