Как написать цикл Python for в виде лямбда-функции с помощью apply или map вместо этого?

#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 % .