Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Почему map не печатает список

#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) аргументов.

Комментариев нет:

Отправить комментарий