Общие функции коллекций
Несмотря на то, что коллекции в Python имеют свои уникальные особенности, они также обладают некоторыми общими способами работы с ними. Так мы можем получить количество элементов любой коллекции и проверить принадлежность элемента ей, а также определить максимальное и минимальное значение или посчитать сумму коллекции чисел.
Размер коллекции
Мы уже встречались с функцией len()
, когда говорили о переборе элементов упорядоченных коллекций по индексу. Но она позволяет узнать, сколько элементов содержится в любой встроенной коллекции Python.
Функция | len(collection) |
Описание | Возвращает количество элементов коллекции collection |
Параметры | collection – коллекция, количество элементов которой требуется определить |
Возвращаемое значение | Целое число |
Например, определим количество элементов в множестве:
weapons = ("Меч", "Лук", "Копье")
print(len(weapons))
# Вывод: 3
Или количество пар «ключ-значение» в словаре:
charactes = {"Аладдин": 18, "Жасмин": 15, "Джафар": 60}
print(len(characters))
# Вывод: 3
Максимальное и минимальное значение коллекции
Python предоставляет удобные функции max()
и min()
для определения наибольшего и наименьшего значения в коллекции соответственно.
Функция | min(collection) |
Описание | Возвращает минимальное значение коллекции collection |
Параметры | collection – коллекция, в которой требуется найти минимальное значение |
Возвращаемое значение | Элемент коллекции |
Функция | max(collection) |
Описание | Возвращает максимальное значение коллекции collection |
Параметры | collection – коллекция, в которой требуется найти максимальное значение |
Возвращаемое значение | Элемент коллекции |
Когда элементы коллекции представлены числами, минимальное и максимальное значение определяются арифметически:
numbers = (21, 23, 100, 24, 25)
print(max(numbers_tuple))
# Вывод: 100
print(min(numbers_tuple))
# Вывод: 21
Но строки сравниваются лексикографически, то есть символ за символом, основываясь на порядковых номерах символах в Юникоде. При этом заглавные буквы будут меньше строчных:
tongue_twister = ("Ехал", "Грека", "через", "реку")
print(max(str_tuple))
# Вывод: через
print(min(str_tuple))
# Вывод: Грека
В словарях можно находить максимальное и минимальное значение как среди ключей:
numbers_dict = {1: 100, 2: 200, 3: 300}
print(max(numbers_dict.keys()))
# Вывод: 3
print(min(numbers_dict.keys()))
# Вывод: 1
Так и среди значений:
print(max(numbers_dict.values()))
# Вывод: 300
print(min(numbers_dict.values()))
# Вывод: 100
Функции max()
и min()
ожидают, что все элементы в коллекции будут одного типа (либо числа, либо строки, либо другие сравнимые типы). Попытка сравнить, например, число со строкой приведет к исключению TypeError.
some_values = ["Это строка", 1, "Снова строка", 2]
print(max(some_values))
# Ошибка: TypeError: '>' not supported between instances of 'int' and 'str'
Сумма элементов коллекции
Если коллекция состоит из чисел, функция sum()
поможет быстро вычислить их общую сумму.
Функция | sum(collection) |
Описание | Возвращает сумму коллекции чисел collection |
Параметры | collection – коллекция чисел, сумму которой требуется найти |
Возвращаемое значение | Целое или вещественное число |
Например, посчитаем сумму кортежа и значений словаря:
numbers_tuple = (10, 20, 30)
print(sum(numbers_tuple))
# Вывод: 60
numbers_dict = {1: 100, 2: 200, 3: 300}
print(sum(numbers_dict.values()))
# Вывод: 600
При этом попытка сложить элементы, которые не являются числами (например, строки), приведет к ошибке TypeError:
str_numbers = "0123456789"
print(sum(str_numbers))
# Ошибка: TypeError: unsupported operand type(s) for +: 'int' and 'str'
Проверка принадлежности элемента коллекции
Мы уже рассматривали работу операторов сравнения и идентичности, а также логических операторов. Они возвращают True
, если выражение истинное, иначе – False
.
Кроме них в Python существует оператор принадлежности in
(с англ. – в). Он возвращает True
, если элемент присутствует в коллекции, и False
в противном случае:
элемент in коллекция
Например, можно проверить содержит ли строка символ или другую строку:
print("сирень" in "Сладкая сирень")
# Вывод: True
Или содержит список или множество какой-либо элемент:
artifacts = ["Рог изобилия", "Бездонный графин", "Волшебная лампа"]
print("Бездонный графин" in artifacts)
# Вывод: True
witchers = {"Геральт", "Весемир", "Эскель"}
if "Весемир" in witchers:
print("Весемир доблестно сражался!")
# Вывод: Весемир доблестно сражался!
В cловаре, как и при переборе элементов в цикле for
, по умолчанию проверяется принадлежность элемента к ключам:
actors = {"Генри Кавилл": "Геральт", "Аня Чалотра": "Йеннифэр", "Фрейя Аллан": "Цирилла"}
print("Генри Кавилл" in actors)
# Вывод: True
Последовательность значений можно получить с помощью уже знакомого нам метода dict.values()
:
actors = {"Генри Кавилл": "Геральт", "Аня Чалотра": "Йеннифэр", "Фрейя Аллан": "Цирилла"}
print("Геральт" in actors.values())
# Вывод: True
Также можно проверить наличие пары (ключ, значение) получив их последовательность с помощью метода dict.items()
:
actors = {"Генри Кавилл": "Геральт", "Аня Чалотра": "Йеннифэр", "Фрейя Аллан": "Цирилла"}
print(("Генри Кавилл", "Геральт") in actors.items())
# Вывод: True
Оператор принадлежности in
можно совмещать с логическим отрицанием not
:
элемент not in коллекция
Тогда будет проверяться отсутствие элемента в коллекции:
birds = ["Синица", "Снегирь", "Воробей"]
print("Голубь" not in birds)
# Вывод: True
1. Дан список: numbers = [15, 8, 23, 8, 42, 10]
. Напишите программу, которая вычисляет размер этого списка и сумму всех элементов списка. Полученные результаты должны быть выведены на экран.
2. Дан кортеж:
fruits = ("Яблоко", "Банан", "апельсин", "киви")
. Напишите программу, которая находит лексикографически наибольшее и наименьшее слово в этом кортеже. Полученные результаты должны быть выведены на экран.
3. Почему этот код вызывает ошибку? Исправьте её.
mixed = [10, "20", 30]
print(sum(mixed))
4. Дан словарь: prices = {"Авокадо": 200, "Киви": 150, "Голубика": 175}
. Напишите программу, которая проверяет есть ли в словаре пара с ключом "Авокадо"
и значением 125
. Результат проверки должен быть выведен на экран.
5. Напишите программу, которая запрашивает у пользователя число n
и после этого запрашивает на ввод n
строк с фруктами и сохраняет их в список. Если этому списку принадлежит строка "Яблоко"
, то программа выводит строку "Вы любите яблоки"
, иначе – "Вы не любите яблоки"
.
Пример входных данных | Пример выходных данных |
---|---|
2 Яблоко Груша |
Вы любите яблоки |
4 Банан Ананас Апельсин Груша |
Вы не любите яблоки |
1 Яблоко |
Вы любите яблоки |