Статьи

Учебные материалы по языку Python — от основ до продвинутых тем

tuple

Страница 26 из 34 · 2026-10-26 · 3 мин чтения

Создание

a = (1, 2, 3)b = 1, 2, 3c = (1,)d = ()e = tuple([1, 2, 3])f = tuple("abc")print(type((1)))print(type((1,)))

Кортеж определяется запятыми, а не скобками. Для одного элемента запятая обязательна.

Операции

t = (10, 20, 30, 40)print(t[0], t[-1])print(t[1:3])print(len(t))print(20 in t)print(t + (50,))print(t * 2)print((1, 2) < (1, 3))print(max(t), min(t), sum(t))

Методы tuple

У кортежа всего два метода:

МетодОписание
count(x)Количество вхождений
index(x[, start, end])Индекс первого вхождения, иначе ValueError
t = (1, 2, 2, 3)print(t.count(2))print(t.index(3))

Неизменяемость

Нельзя заменить, добавить или удалить элементы:

t = (1, 2, 3)try:    t[0] = 10except TypeError as e:    print(e)

Но если внутри кортежа лежит изменяемый объект, его содержимое можно менять:

t = ([1, 2], 3)t[0].append(99)print(t)

Хешируемость

Кортеж хешируем, если хешируемы все его элементы, поэтому подходит в качестве ключа словаря и элемента множества:

grid = {(0, 0): "start", (1, 2): "finish"}print(grid[(1, 2)])seen = {(1, 2), (3, 4)}print((1, 2) in seen)print(hash((1, 2)))

Распаковка

x, y = (1, 2)a, *rest = (1, 2, 3, 4)first, *mid, last = (1, 2, 3, 4, 5)(p, q), r = (1, 2), 3x, y = y, x

Обмен значений через x, y = y, x работает потому, что правая часть сначала собирается в кортеж.

Возврат нескольких значений

def stats(items):    return min(items), max(items), sum(items) / len(items)low, high, avg = stats([3, 5, 7])print(low, high, avg)

namedtuple

Кортеж с именами полей:

from collections import namedtuplePoint = namedtuple("Point", ["x", "y"])p = Point(3, 4)print(p)print(p.x, p[1])print(p._asdict())print(p._replace(x=10))print(Point._fields)x, y = p
ЭлементОписание
_fieldsКортеж имён полей
_asdict()Преобразование в словарь
_replace(**kwargs)Копия с изменёнными полями
_make(iterable)Классовый метод: создание из последовательности
_field_defaultsЗначения по умолчанию

typing.NamedTuple

Тот же тип с аннотациями и методами:

from typing import NamedTupleclass Point(NamedTuple):    x: float    y: float = 0.0    def dist(self):        return (self.x ** 2 + self.y ** 2) ** 0.5print(Point(3, 4).dist())

Когда использовать кортеж, а когда список

КортежСписок
Неизменяемая запись из разнородных полейОднородная коллекция переменной длины
Ключ словаря, элемент множестваДанные, которые нужно менять
Возврат нескольких значенийНакопление результата
Немного меньше памяти и быстрее созданиеБольше гибкости

Задания

  1. Сохраните координаты городов в словаре с ключами-кортежами и найдите ближайший к заданной точке.
  2. Опишите запись «студент» через NamedTuple и отсортируйте список по среднему баллу.
  3. Объясните, почему t = ([], 1); t[0] += [1] вызывает ошибку, но список всё равно изменяется.