у меня есть список:
seq = ['soup','dog','salad','cat','great']
Согласно определению фильтра, приведенный ниже код дает правильный результат:
list(filter(lambda w: w[0]=='s',seq))
['soup','salad']
т.е. возврат списка, содержащего только слова, начинающиеся с 's'
но если я использую функцию карты, она возвращает список как истина / ложь:
list(map(lambda w: w[0]=='s',seq))`
[True, False, True, False, False]
объясните, пожалуйста, функцию карты w.r.t. к приведенному выше примеру






map применяет функцию к последовательности и возвращает генератор.
Пример:
k = list(map(int,["1","2","3"]))
int() - это функция string->int, следовательно, k становится:
k == [1,2,3] # (a list of ints)
Ваша лямбда - это функция string->bool, которая принимает string и оценивает первый символ как 's' или нет:
lambda w: w[0]=='s'
Как функция string->bool, ваш результат будет list из bool при использовании list(map(lambda w: w[0]=='s', seq)) для применения вашей лямбда к вашей последовательности.
Кстати. вы также могли бы сделать это как понимание списка:
s_seq = [x for x in seq if x[0]=='s'] # which is closer to what filter does...
Это могло бы пролить больше света на map(): Понимание функции карты
Отличный ответ. То, чего я не знал, но стоит отметить. Спасибо.