Шаг 24.
Однострочники Python.
Трюки Python. Лямбда-функции и функция map() (окончание)

    На этом шаге мы приведем текст однострочика, решающего указанную задачу, и разберем принцип его действия.

Код

    Получая на входе список строковых значений, наш следующий однострочник (пример 2.4) создает новый список кортежей, каждый из которых состоит из булева значения и исходной строки. Булево значение указывает, встречается ли в исходном строковом значении строка символов 'anonymous'! Мы назвали полученный в результате список mark, поскольку булевы значения отмечают (mark) строковые элементы в списке, содержащие строку символов 'anonymous'.


Пример 2.4. Однострочное решение, помечающее строковые значения, содержащие строку символов 'anonymous'
## Данные
txt = ['lambda functions are anonymous functions.',
'anonymous functions dont have a name.',
'functions are objects in Python.']

## Однострочник
mark = map(lambda s: (True, s) if 'anonymous' in s else (False, s), txt)

## Результаты
print(list(mark))
Архив с файлом можно взять здесь.

    Какими же будут результаты выполнения этого фрагмента кода?

Принцип работы

    Функция map() добавляет к каждому строковому элементу исходного списка txt булево значение, равное True, если этот строковый элемент содержит слово anonymous. Первый аргумент представляет собой анонимную лямбда-функцию, а второй - список строковых значений, которые мы хотим проверить на вхождение желаемой подстроки.

    Для поиска подстроки 'anonymous' используется возвращаемое выражение лямбда-функции (True, s) if 'anonymous' in s else (False, s). Значение s представляет собой входной аргумент лямбда-функции, в этом примере - строковое значение. Если в данной строке встречается последовательность символов 'anonymous', то выражение возвращает кортеж (True, s). В противном случае возвращается кортеж (False, s).

    Результат работы этого однострочника выглядит следующим образом:

## Результат print(list(mark))
# [(True, 'lambda functions are anonymous functions.'), 
#  (True, 'anonymous functions dont have a name.'), 
#  (False, 'functions are objects in Python.')]

    Булевы значения демонстрируют, что только первые два строковых значения в списке содержат подстроку 'anonymous'.

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

    Задание 2.1. Попробуйте получить те же результаты с помощью спискового включения вместо функции map().

Раскрыть/скрыть решение и комментарии.

    На следующем шаге мы рассмотрим извлечение окружения вхождений подстрок с помощью срезов.




Предыдущий шаг Содержание Следующий шаг