На этом шаге мы приведем текст однострочика, решающего указанную задачу, и разберем принцип его действия.
Получая на входе список строковых значений, наш следующий однострочник (пример 2.4) создает новый список кортежей, каждый из которых состоит из булева значения и исходной строки. Булево значение указывает, встречается ли в исходном строковом значении строка символов 'anonymous'! Мы назвали полученный в результате список mark, поскольку булевы значения отмечают (mark) строковые элементы в списке, содержащие строку символов '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().
Раскрыть/скрыть решение и комментарии.
На следующем шаге мы рассмотрим извлечение окружения вхождений подстрок с помощью срезов.