Освоение кортежей (tuples) в Python: упаковка, распаковка, сравнение, срезы и ключи словаря
Понимание сопоставления кортежей в Python
Сопоставление кортежей группирует кортежи, сравнивая указанный элемент, обычно второй. Обычный паттерн — использовать словарь с элементом кортежа как ключом. Кроме того, можно строить новые кортежи из срезов существующих.
Основы синтаксиса кортежей
Определите кортеж через значения, разделённые запятыми, в скобках:
tup = ('Jan', 'Feb', 'Mar')
Пустые кортежи: tup1 = ().
Для единственного значения нужна завершающая запятая: tup1 = (50,). Индексы начинаются с 0; кортежи поддерживают конкатенацию и срезы.
Присваивание кортежей
Python позволяет одновременное присваивание нескольких переменных через кортеж. Удобно для распаковки структурированных данных.
Пример:
tup1 = ('Robert', 'Carlos', '1965', 'Terminator 1995', 'Actor', 'Florida')
tup2 = (1, 2, 3, 4, 5, 6, 7)
print(tup1[0]) # Robert
print(tup2[1:4]) # (2, 3, 4)
Упаковка и распаковка
«Упаковка» помещает значения в новый кортеж; «распаковка» извлекает их обратно в переменные.
x = ('Guru99', 20, 'Education')
(company, emp, profile) = x
print(company) # Guru99
print(emp) # 20
print(profile) # Education
Сравнение кортежей
Операторы сравнения (<, >, == и др.) работают лексикографически: первый отличающийся элемент определяет результат.
# Случай 1
a = (5, 6)
b = (1, 4)
if a > b:
print('a is bigger')
else:
print('b is bigger')
Аналогично для других случаев: если первые элементы равны, сравнение продолжается со следующим элементом.
Использование кортежей как ключей словаря
Так как кортежи хешируемы, они могут служить ключами словаря, в отличие от списков.
directory = {('last', 'first'): '555-1234'}
for last, first in directory:
print(first, last, directory[(last, first)])
Элементы словаря можно получить как список пар ключ-значение в виде кортежей:
a = {'x': 100, 'y': 200}
b = list(a.items())
print(b) # [('x', 100), ('y', 200)]
Удаление кортежей
Кортежи неизменяемы; нельзя удалить отдельные элементы. Однако можно удалить весь объект кортежа оператором del.
Срезы кортежей
Синтаксис срезов работает для кортежей так же, как для списков:
x = ('a', 'b', 'c', 'd', 'e')
print(x[2:4]) # ('c', 'd')
Встроенные функции для кортежей
Кортежи отлично работают с функциями all(), any(), enumerate(), max(), min(), sorted(), len(), tuple().
Преимущества кортежей над списками
- Итерация по кортежам немного быстрее за счёт неизменяемости.
- Только неизменяемые последовательности могут быть ключами словаря; кортежи подходят.
- Хранение неизменяемых данных в кортеже гарантирует, что они не изменятся случайно.
Краткое резюме
- Упаковка и распаковка позволяют чистую передачу данных.
- Кортежи можно сравнивать лексикографически.
- Используйте кортежи как составные ключи словаря.
- Кортежи неизменяемы; используйте
delдля удаления всего объекта. - Срезы эффективно извлекают подкортежи.
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам
- Освоение кортежей (tuples) в Python: упаковка, распаковка, сравнение, срезы и ключи словаря
- Словари Python: добавление, обновление и управление парами ключ/значение