Программа курса:
Функции map(), all() и any() в Python
.jpg)
Мы уже знакомились с функцией map() в курсе, используя её для создания списков из чисел при вводе через input() и в комбинации с lambda для создания мощных комбинаций из нескольких функций. Теперь пришло время детальнее разобраться, как работает эта функция, и как её можно использовать в сочетании с другими полезными функциями Python — all() и any().
1. Функция map()
Давайте вспомним, что функция map() позволяет применить заданную функцию к каждому элементу последовательности и вернуть итератор с результатами. Это делает её очень удобной для преобразования данных.
Синтаксис:
map(function, iterable)Где:
function— это функция, которая применяется к каждому элементу.iterable— это последовательность (например, список, кортеж), элементы которой будут преобразованы.
Пример 1: Использование map() для преобразования списка чисел
Давайте начнем с простого примера: предположим, у нас есть список чисел, и мы хотим возвести каждое число в квадрат.
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x ** 2, numbers))
print(squares)Вывод:
[1, 4, 9, 16, 25]Здесь мы применили лямбда-функцию lambda x: x ** 2, которая возводит число в квадрат, к каждому элементу списка numbers.
Пример 2: Преобразование строк в заглавные
С помощью map() мы можем легко преобразовать все строки в списке к верхнему регистру.
words = ['apple', 'banana', 'cherry']
capitalized_words = list(map(str.upper, words))
print(capitalized_words)Вывод:
['APPLE', 'BANANA', 'CHERRY']Здесь к каждой строке применяется метод str.upper(), который делает все символы заглавными.
Пример 3: Преобразование нескольких последовательностей одновременно
Функция map() также может работать с несколькими последовательностями, если передать её функции несколько аргументов.
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
sums = list(map(lambda x, y: x + y, numbers1, numbers2))
print(sums)Вывод:
[5, 7, 9]Здесь map() применяет лямбда-функцию, которая суммирует соответствующие элементы двух списков.
Пример 4: Преобразование строки чисел
Часто нам нужно преобразовать список строковых чисел в числа. С map() это очень легко.
string_numbers = ['1', '2', '3', '4', '5']
int_numbers = list(map(int, string_numbers))
print(int_numbers)Вывод:
[1, 2, 3, 4, 5]Функция int преобразует каждую строку в число.
Пример 5: Применение функции к элементам списка кортежей
Представим, что у нас есть список кортежей, и мы хотим сложить элементы внутри каждого кортежа.
pairs = [(1, 2), (3, 4), (5, 6)]
sums = list(map(lambda pair: pair[0] + pair[1], pairs))
print(sums)Вывод:
[3, 7, 11]Здесь мы используем лямбда-функцию для сложения двух элементов каждого кортежа.
2. Функция all()
Функция all() проверяет, истинны ли все элементы последовательности. Она возвращает True, если все элементы истинны (или если последовательность пуста). В противном случае возвращается False.
Синтаксис:
all(iterable)
Пример 1: Список, состоящий полностью из True
Функция all() вернет True, если все элементы в последовательности истинные (включая булевые значения).
bool_list = [True, True, True]
result = all(bool_list)
print(result)Вывод:
TrueПоскольку все элементы в списке являются True, функция all() возвращает True.
Пример 2: Список с хотя бы одним True
Теперь проверим, как работает any(), если хотя бы одно значение в списке — True.
bool_list = [False, False, True]
result = any(bool_list)
print(result)Вывод:
TrueНесмотря на то, что в списке есть элементы False, наличие хотя бы одного значения True заставляет функцию any() вернуть True.
Пример 3: Список, состоящий только из False
Если весь список состоит только из False, all() вернет False, а any() также вернет False, поскольку нет ни одного истинного значения.
bool_list = [False, False, False]
all_result = all(bool_list)
any_result = any(bool_list)
print(f"all() для списка: {all_result}")
print(f"any() для списка: {any_result}")Вывод:
all() для списка: False
any() для списка: FalseТак как все значения в списке — ложные, all() возвращает False, а any() также возвращает False, поскольку нет ни одного истинного значения.
Пример 4: Использование all() и any() для пустого списка
Особое поведение можно наблюдать при передаче пустого списка в функции all() и any():
all()вернетTrueдля пустого списка, поскольку нет элементов, которые могут быть ложными.any()вернетFalse, потому что нет элементов, которые могут быть истинными.
empty_list = []
all_result = all(empty_list)
any_result = any(empty_list)
print(f"all() для пустого списка: {all_result}")
print(f"any() для пустого списка: {any_result}")Вывод:
all() для пустого списка: True
any() для пустого списка: False
Пример 5: Проверка, все ли элементы положительные
Предположим, у нас есть список чисел, и мы хотим проверить, все ли они положительные.
numbers = [1, 2, 3, 4, 5]
result = all(x > 0 for x in numbers)
print(result)Вывод:
TrueЗдесь все числа больше нуля, поэтому результат — True.
Пример 6: Проверка списка с ложным элементом
Теперь рассмотрим список, в котором есть отрицательное число.
numbers = [1, 2, 3, -4, 5]
result = all(x > 0 for x in numbers)
print(result)Вывод:
FalseПоскольку в списке есть отрицательное число, all() возвращает False.
Пример 7: Проверка строк на наличие заглавной буквы
Давайте проверим, начинаются ли все строки в списке с заглавной буквы.
words = ['Apple', 'Banana', 'Cherry']
result = all(word[0].isupper() for word in words)
print(result)Вывод:
TrueВсе строки начинаются с заглавной буквы, поэтому результат — True.
3. Функция any()
Функция any() возвращает True, если хотя бы один элемент последовательности истинный. Если все элементы ложные или последовательность пуста, возвращается False.
Синтаксис:
any(iterable)
Пример 1: Проверка наличия хотя бы одного положительного числа
Допустим, у нас есть список чисел, и мы хотим узнать, есть ли в нем хотя бы одно положительное число.
numbers = [-1, -2, -3, 4, -5]
result = any(x > 0 for x in numbers)
print(result)Вывод:
TrueПоскольку число 4 больше нуля, функция any() возвращает True.
Пример 2: Проверка, содержат ли строки слово "Python"
Рассмотрим список строк. Мы хотим проверить, есть ли хотя бы одна строка, которая содержит слово "Python".
sentences = ['I love coding', 'Python is great', 'Hello, world']
result = any('Python' in sentence for sentence in sentences)
print(result)Вывод:
TrueОдна из строк содержит слово "Python", поэтому результат — True.
Пример 3: Проверка списка на наличие неотрицательного числа
Проверим, есть ли в списке хотя бы одно неотрицательное число.
numbers = [-1, -2, -3, 0, -5]
result = any(x >= 0 for x in numbers)
print(result)Вывод:
TrueПоскольку 0 является неотрицательным числом, функция any() возвращает True.
Пример 4: Проверка всех строк на пустоту
Теперь проверим, есть ли в списке хотя бы одна пустая строка.
strings = ['Hello', 'World', '']
result = any(s == '' for s in strings)
print(result)Вывод:
TrueПоскольку одна из строк пуста, функция any() возвращает True.
Пример 5: Проверка чисел на большее значение, чем 100
Проверим, есть ли в списке хотя бы одно число больше 100.
numbers = [10, 20, 30, 150]
result = any(x > 100 for x in numbers)
print(result)Вывод:
TrueЧисло 150 больше 100, поэтому результат — True.
Пример 6: Проверка наличия хотя бы одного отрицательного числа
numbers = [1, 2, 3, 4, 5]
result = any(x < 0 for x in numbers)
print(result)Вывод:
FalseВ списке нет отрицательных чисел, поэтому результат — False.
Пример 7: Проверка, есть ли хотя бы одно значение в списке строк
strings = ['apple', '', 'banana']
result = any(s for s in strings)
print(result)Вывод:
TrueТак как есть непустая строка, функция any() возвращает True.
Комбинирование функций map(), all() и any()
Часто бывает полезно комбинировать функции map(), all() и any() для выполнения сложных проверок и преобразований данных в один шаг. Рассмотрим несколько примеров, где эти функции работают вместе для достижения различных целей.
Пример 1: Проверка, все ли элементы списка являются числами
Используем map() для проверки типа каждого элемента списка и all() для того, чтобы убедиться, что все элементы списка — числа.
items = [1, 2, 3, '4', 5]
result = all(map(lambda x: isinstance(x, int), items))
print(result)Вывод:
FalseЗдесь функция map() применяет isinstance(x, int) к каждому элементу списка, а all() проверяет, все ли элементы являются целыми числами. Поскольку один из элементов — строка '4', результат — False.
Пример 2: Проверка, есть ли в списке хотя бы одно четное число
Используем map() для получения булевых значений, показывающих, является ли каждое число четным, и any() для проверки наличия хотя бы одного четного числа.
numbers = [1, 3, 5, 8, 11]
result = any(map(lambda x: x % 2 == 0, numbers))
print(result)Вывод:
TrueФункция map() проверяет, является ли каждое число четным, а any() возвращает True, так как число 8 четное.
Пример 3: Проверка длины строк
Предположим, у нас есть список строк, и мы хотим проверить, все ли строки имеют длину больше 3 символов.
words = ['apple', 'banana', 'kiwi']
result = all(map(lambda word: len(word) > 3, words))
print(result)Вывод:
TrueЗдесь функция map() проверяет длину каждой строки, а all() убеждается, что все строки длиннее 3 символов.
Пример 4: Преобразование строк и проверка их длины
Допустим, у нас есть список строк, которые нужно сначала преобразовать в верхний регистр, а затем проверить, что хотя бы одна из них короче 5 символов.
words = ['apple', 'kiwi', 'banana']
result = any(map(lambda word: len(word.upper()) < 5, words))
print(result)Вывод:
TrueФункция map() сначала преобразует каждую строку в верхний регистр с помощью upper(), а затем проверяет её длину. В этом примере ни одна строка не короче 5 символов, поэтому результат — False.
Пример 5: Проверка всех элементов на положительность после преобразования
Допустим, у нас есть список чисел, которые нужно удвоить, и мы хотим убедиться, что все полученные значения положительные.
numbers = [-1, 2, -3, 4, -5]
result = all(map(lambda x: x * 2 > 0, numbers))
print(result)Вывод:
FalseФункция map() удваивает каждое число, а all() проверяет, все ли результаты больше нуля. Поскольку некоторые числа остаются отрицательными даже после удвоения, результат — False.
Пример 6: Проверка, есть ли хотя бы одно число кратное 3
Здесь мы проверим, есть ли хотя бы одно число в списке, кратное 3.
numbers = [4, 7, 9, 11, 13]
result = any(map(lambda x: x % 3 == 0, numbers))
print(result)Вывод:
TrueФункция map() проверяет, делится ли каждое число на 3 без остатка, а any() возвращает True, так как 9 кратно 3.
Пример 7: Комплексная проверка строк на содержание определенных символов
Допустим, у нас есть список строк, и мы хотим проверить, содержат ли все строки букву "a" и хотя бы одна строка начинается с буквы "b".
words = ['apple', 'banana', 'cherry']
contains_a = all(map(lambda word: 'a' in word, words))
starts_with_b = any(map(lambda word: word.startswith('b'), words))
print(f"Все строки содержат 'a': {contains_a}")
print(f"Хотя бы одна строка начинается с 'b': {starts_with_b}")Вывод:
Все строки содержат 'a': True
Хотя бы одна строка начинается с 'b': TrueЗдесь map() проверяет каждую строку на наличие символа 'a' для функции all() и на то, начинается ли строка с 'b' для функции any().
Вот краткое содержание по функциям map(), all() и any() в виде таблицы:
| Функция | Описание | Синтаксис | Примеры использования |
|---|---|---|---|
map() | Применяет функцию ко всем элементам последовательности и возвращает итератор с результатами. | map(function, iterable) | Возведение в квадрат: map(lambda x: x**2, [1, 2, 3]) |
Преобразование строк в верхний регистр: map(str.upper, ['apple', 'banana']) | |||
Одновременное преобразование нескольких последовательностей: map(lambda x, y: x + y, [1, 2], [3, 4]) | |||
all() | Возвращает True, если все элементы последовательности истинны. | all(iterable) | Проверка на положительные числа: all(x > 0 for x in [1, 2, 3]) |
Пустой список: all([]) вернет True | |||
any() | Возвращает True, если хотя бы один элемент последовательности истинный. | any(iterable) | Проверка на наличие положительного числа: any(x > 0 for x in [-1, -2, 4]) |
Проверка строк на пустоту: any(s == '' for s in ['hello', 'world', '']) | |||
Комбинация map(), all(), any() | Используются вместе для проверки и преобразования данных. | - | Пример: Проверка, все ли элементы списка числа: all(map(lambda x: isinstance(x, int), [1, '2', 3])) |
Таблица предоставляет краткий обзор синтаксиса и основных примеров использования каждой функции.
Функции map(), all() и any() являются мощными инструментами для работы с последовательностями данных в Python. map() позволяет эффективно преобразовывать данные, в то время как all() и any() упрощают проверку условий в последовательностях. Эти функции могут значительно упростить код и сделать его более читаемым.
rootcrop
,capitalized_words = list(map(str.upper(), words))
admin
,rootcrop, Поправил.
Paws
,VS Code ругается на этот код, просит аргумент:
words = ['apple', 'banana', 'cherry']
capitalized_words = list(map(str.upper(), words))
print(capitalized_words)
TypeError: unbound method str.upper() needs an argument
Если по аналогии с предыдущим примером добавить lambda str: , то все работает
admin
,Paws, Исправил, там просто скобки надо было убрать у upper, чтоб не было вызова.
Paws
,в этом примере 'kiwi' короче 5 символов, поэтому результат True (у Вас False)
words = ['apple', 'kiwi', 'banana']
result = any(map(lambda word: len(word.upper()) < 5, words))
print(result)
admin
,Paws, Исправил.