#python #for-loop #iteration #apply
#python #for-loop #итерация #применить
Вопрос:
Как бы я написал этот код, используя лямбда-функцию и apply или map? Я просмотрел несколько сообщений в блогах и т. Д., Но по какой-то причине мне кажется, что я что-то упускаю. Я думаю, это должно быть действительно просто.
for i in range(2,5):
print(f'I only have {i} friends, but they are awesome.')
# I only have 2 friends, but they are awesome.
# I only have 3 friends, but they are awesome.
# I only have 4 friends, but they are awesome.
Комментарии:
1. Вы бы этого не сделали. Цикл является подходящим и предпочтительным способом выполнения серии операторов.
Ответ №1:
Цикл достаточно хорош для этой задачи, но если по какой-то причине вы должны использовать lambda и map, вы можете сделать это следующим образом:
list(map(lambda x: print(f"I only have {x} friends, but they are awesome."), range(2, 5)))
Выражение необходимо обернуть, list()
поскольку map
функция выполняется с нетерпением, что означает, что она не вычисляет выходные данные, пока это не понадобится.
Комментарии:
1. Спасибо. Это именно то, что мне было нужно. Я думаю, что в моей собственной попытке мне не хватало list() . И чтобы уточнить, приведенный выше цикл был не фактической задачей, которую я выполнял, а просто воспроизводимым примером, ха-ха. Еще раз спасибо за вашу помощь.
Ответ №2:
вы не просто используете lambda или map для выполнения приведенного выше кода, но если вы хотите достичь этого только с помощью lambda или map, вам нужно преобразовать объект map в список.
list(map(lambda x:print(f'I only have {x} friends, but they are awesome.'), range(2,5)))
Ответ №3:
Вы вообще не хотите использовать лямбды, нечитаемые. Лямбда-выражения не могут содержать циклы, операторы. Они могут содержать только выражения (например, математические), однако к вашей проблеме можно подойти следующим образом.
s = 'I only have {} friends, but they are awesome.'
f = lambda x: list(map(print, map(s.format, x)))
f([1, 2, 3])
Мы вызываем list для принудительной оценки генератора результатов, обратите внимание, что он вызывается 3 раза ([1, 2, 3]) и, следовательно, возвращаются [None, None, None] . Генератор результатов в основном отображает функцию печати в списке, который выглядит как [s.format(1), s.format(2), s.format(3)]
Я хотел только показать вам, как это сделать, но это очень плохой подход.
Мы можем сделать то же самое с помощью fstrings или percent % .