Рубрики
Без рубрики

Python для петли внутри лямбда

Проблема: Учитывая утилизируемое, как распечатать его, используя A для LOOP в рамках функции лямбда. Обзор В этом руководстве мы узнаем, почему это не умная идея использовать для петли внутри лямбда в Python. Это часто задаваемый вопрос программистами и новичками. Следовательно, он должен быть адресован … Python для петли внутри лямбда Подробнее »

Автор оригинала: Shubham Sayon.

Проблема: Учитывая, как распечатать его с использованием петли в рамках функции лямбда.

Обзор

В этом руководстве мы узнаем, почему это не умная идея использовать для петли внутри лямбда в Python. Это часто задаваемый вопрос программистами и новичками. Следовательно, он должен быть адресован как можно скорее.

Давайте посмотрим на пример/вопрос, что большинство программистов Newbie сталкиваются с этим, имеющие дело с лямбда Функция и для петлей в питоне. Следующий вопрос – это классический пример путаницы, который вы можете столкнуться с использованием метода лямбда вместе с контуром для цикла.

Пример:

Источник: переполнение стека

Давайте пойдем вперед, выполните этот код в нашей консоли, чтобы узнать, что произойдет!

y = "hello and welcome"
x = y[0:]
x = lambda x: (for i in x : print i)

Выход:

x_list = list(lambda i: for i in x)
                            ^
SyntaxError: invalid syntax

Причина: Так как для Цикл – это Заявление он не должен быть включен в лямбда выражение Отказ

✨solution 1: Использование понимания списка

Использование функции лямбда с петли для для цикла, безусловно, не способ подходить к таким проблемам. Вместо этого вы можете просто использовать понимание списка для переоценки заданной строки/списка/коллекции и напечатайте его соответственно, как показано в решении ниже.

y = "hello and welcome"
x = y[0:].split(" ")
res = [print(i) for i in x]

Выход:

hello
and
welcome

💡 Быстрый реконструкцию списков.

Понимание списка является компактным способом создания списков. Простая формула – [Выражение + контекст] Отказ Выражение : Что делать с элементом каждого списка? Контекст : Какие элементы для выбора? Контекст состоит из произвольного числа для и, если утверждения. Пример : [X для X в диапазоне (3)] Создает список [0, 1, 2] . Рекомендуемое руководство: Понимание списка в Python – полезное иллюстрированное руководство

✨solution 2: Использование списка + карта + лямбда

Еще один обходной путь к нашей проблеме – использовать карта () Метод вместе с лямбда Функция, а затем пописать вывод на Список Отказ

карта () Функция преобразует одну или несколько ейтов в новую, применяя «Функция трансформатора» к I-ю элементам каждой илетности. Аргументы – это Функция трансформатора объекта и один или несколько версий Отказ Если вы пройдете N по темпам В качестве аргументов функция трансформатора должна быть N Функция Принимая N Входные аргументы. Возвращаемая стоимость представляет собой объект ITERABLE MAP из преобразованного и, возможно, агрегированных элементов. Рекомендуемое руководство: Python Map () – Наконец, овладение функцией карты Python

Теперь давайте посмотрим на код/решение:

y = "hello and welcome"
x = y[0:].split(" ")
res = list(map(lambda x: print(x), x))

Выход:

hello
and
welcome

✨solution 3: Использование метода записи на Sys.Stdout вместе с методом объединения

Простое решение для решения проблемы состоит в том, чтобы использовать Написать Метод на sys.stdout а затем используйте Присоединяйтесь к Метод на результате отображать выход. Давайте посмотрим на следующие Код Чтобы понять подход:

import sys

y = "hello and welcome"
x = y[0:].split(" ")
res = lambda x: sys.stdout.write("\n".join(x) + "\n")
res(x)

Выход:

hello
and
welcome

С учетом условных заявлений и так и Печать (в Python 2.x) они не будут работать внутри выражения лямбда. Таким образом, используя Написать Метод на sys.stdout Модуль может помочь нам обойти эту проблему.

Если вы задаетесь вопросом о разнице между Печать и sys.stdout.write → Обратитесь к эта ссылка Отказ

Примечание: String.join (ИТЕРАЛ) Метод объединяет все строковые элементы в считать (например, список, строка или кортеж) и возвращает результат как новую строку. строка На котором вы называете это строку разделителя – и он отделяет отдельные элементы. Например, '-'. Присоединяйтесь («Hello ',« мир »]) Возвращает соединенную строку «Привет-мир» Отказ Рекомендуется прочитать: Список присоединения Python [Ultimate Guide]

🔖 Собесным примером

Решения для приведенного выше примера были простыми. Теперь давайте посмотрим на немного сложный сценарий.

Проблема: Учитывая список чисел, храните четные номера из списка в другой список и умножите каждое число на 5, чтобы отобразить выход.

Реализация вышеуказанной проблемы с использованием цикла A для LOOP довольно проста, как показано ниже.

x = [2, 3, 4, 5, 6]
y = []
for v in x:
    if v % 2:
        y += [v * 5]
print(y)

Выход:

[15, 25]

Но Как вы решите вышеуказанную проблему в одной строке?

Решение уже обсуждалось выше. Есть два способа сделать это:

🏷️method 1: Используя понимание списка

x = [2, 3, 4, 5, 6]
y = [v * 5 for v in x if v % 2]
print(y)

# [15, 25]

🏷️method 2: Используя комбинацию списка + карта + лямбда + фильтр

x = [2, 3, 4, 5, 6]
y = list(map(lambda v: v * 5, filter(lambda u: u % 2, x)))
print(y)

# [15, 25]

Целью вышеуказанного примера является обеспечение того, чтобы вы хорошо разбирались с проблемами, которые включают итерации в одной строке для генерации вывода.

💡tidbit: Когда использовать функции лямбда?

Функции лямбда используются, когда вам нужна функция для краткого таймфрейма. Он также используется, когда вы должны пропустить функцию в качестве аргумента для функций более высокого порядка (функции, которые принимают различные функции в качестве своих аргументов). Давайте посмотрим на пару примеров.

Пример 1:

lst = [1, 2, 3, 4, 5]
# Adding 10 to every element in list using lambda
lst2 = list(map(lambda i: i + 10, lst))
# Printing the list
print("Modified List: ", lst2)

Выход:

Modified List:  [11, 12, 13, 14, 15]

Пример 2:

# Using lambda inside another function
def foo(no):
    return lambda i: i + no


sum = foo(10)
print("Sum:", sum(5))

Выход:

Sum: 15

Чтобы узнать больше о функции лямбда и его использование в Python, пожалуйста, посмотрите на следующие учебные пособия: ➥ Лямбда функции в Python: Простое введение ➥ Лямбда исчисление в Python

Заключение

Таким образом, вышеупомянутое обсуждение показывает, что никогда не бывает не большая идея использовать петлю в пределах выражений лямбда. Вместо этого вы можете использовать обходные пути, которые были предложены выше.

Чтобы продолжать обучение, пожалуйста, подпишитесь и оставайтесь на улице для более интересных дискуссий и учебников.

Рекомендуется: Академия компьютерной науки Finxter

  • Вы хотите быстро освоить самые популярные Python IDE?
  • Этот курс приведет вас от новичка к эксперту в Пычарме в ~ 90 минут.
  • Для любого разработчика программного обеспечения имеет решающее значение для освоения IDE хорошо, писать, тестировать и отлаживать высококачественный код с небольшим усилием.

Присоединяйтесь к Pycharm MasterClass Сейчас и мастер Pycharm на завтра!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @:

Оригинал: “https://blog.finxter.com/python-for-loop-inside-lambda/”