#python #python_3x #список
Вот мой код: l = [1,2,3,4] map(lambda x: print(x), l) Почему он не выводит список?
Ответы
Ответ 1
map - ленивый объект, print применяется к очередному элементу l только когда очередной элемент будет запрошен у самого map. Форсировать вычисления можно, например, обернув map в list list(map(lambda x: print(x), l)) или каким нибудь другим образом заставить map вернуть все элементы 'что-то, чего точно нет в результирующей коллекции' in map(lambda x: print(x), l) for _ in map(lambda x: print(x), l): pass Но все же лучше применять map только тогда, когда результат важен. В вашем случае важен только побочный эффект - вывод на экран. Обычный for в этой ситуации будет гораздо более уместным.Ответ 2
Потому что map() возвращает итератор а не готовый список. Это может быть очень полезным когда вам надо обрабатывать огромные массивы данных. Попробуйте так: l = [1, 2, 3, 4] squares = list(map(lambda x: x**2, l)) print(squares) # [1, 4, 9, 16]Ответ 3
Потому что он ленивый. Результат надо вычислить list(map(lambda x: print(x), l))Ответ 4
Уже имеющиеся ответы достаточно полно раскрывают вопрос, я лишь хочу немного их дополнить: В вашем случае lambda не обязательна, в map можно передать функцию print напрямую: map(print, l). Если хочется напечатать список, можно просто использовать функцию print один раз: print(*l) # распечатает список в одну строку, разделяя элементы пробелами print(*l, sep='\n') # распечатает список, по одному элементу на строке Синтаксис *l называется распаковкой (unpacking) аргументов.
Комментариев нет:
Отправить комментарий