Полное руководство по работе с кортежами (tuple) в языке Python

Раздел: Типы данных -> Кортежи

Кортеж (tuple) в Python

Кортеж - это неизменяемая последовательность элементов, которая используется для хранения упорядоченных данных. В отличие от списка, кортеж нельзя изменить после создания. Это обеспечивает целостность данных и позволяет использовать кортежи в качестве ключей словарей.

Самый простой способ создать кортеж - перечислить элементы в круглых скобках:

my_tuple = (1, 2, 3)
print(my_tuple[0])  # 1

добавить в кортеж python (добавление элемента в кортеж в python)

Доступ к элементам осуществляется по индексу, как в списке. Попытка изменить элемент приведёт к ошибке:

my_tuple[0] = 10  # TypeError: 'tuple' object does not support item assignment

элементы кортежа python (элементы кортежа в python)

Типичная ошибка:

Изменение кортежа. Решение: использовать список, если требуется изменяемость, или создать новый кортеж.

Как преобразовать список или другую последовательность в кортеж?

Функция tuple() принимает любой итерируемый объект и возвращает кортеж:

my_list = [4, 5, 6]
new_tuple = tuple(my_list)
print(new_tuple)  # (4, 5, 6)

тип tuple python (тип tuple в python)

Возможная проблема:

Передача неитерируемого объекта (например, целого числа) вызывает TypeError. Решение: убедиться, что аргумент поддерживает итерацию.

Как присвоить элементы кортежа отдельным переменным?

Распаковка кортежа позволяет присвоить каждое значение отдельной переменной:

coordinates = (10, 20)
x, y = coordinates
print(x, y)  # 10 20

Если количество переменных не совпадает с длиной кортежа, возникает ошибка. Для захвата остатка используется звёздочка:

a, *b = (1, 2, 3, 4)
print(a)  # 1
print(b)  # [2, 3, 4]

Частая ошибка:

Несоответствие числа переменных и элементов. Решение: применить распаковку с * или проверить длину кортежа.

Как создать кортеж с полями, доступными по имени?

Модуль collections предоставляет namedtuple - фабричный класс для создания подклассов кортежа с именованными полями:

from collections import namedtuple

Person = namedtuple('Person', ['name', 'age'])
p = Person('Alice', 30)
print(p.name, p.age)  # Alice 30

Проблема:

Забытый импорт или неправильное имя класса. Решение: всегда импортировать namedtuple и проверять названия полей.

В каких случаях кортеж предпочтительнее списка?

Кортежи занимают меньше памяти и работают быстрее при итерации. Они незаменимы, когда данные не должны изменяться (например, константы, ключи словаря, возвращаемые значения функций). Пример сравнения:

import sys
print(sys.getsizeof((1,2,3)))  # меньше
print(sys.getsizeof([1,2,3]))  # больше

Ошибка выбора:

Использование кортежа там, где нужна изменяемость. Решение: если данные планируется изменять, выбирать список.

Какие встроенные методы есть у кортежа?

Кортеж имеет только два метода:

  • count(value) - возвращает количество вхождений значения.
  • index(value, start, stop) - возвращает индекс первого вхождения.
t = (1, 2, 2, 3)
print(t.count(2))  # 2
print(t.index(3))  # 3

Проблема:

Если значение отсутствует, index() вызывает ValueError. Решение: предварительная проверка value in t.

Дополнительные примеры работы с кортежами.

Пустой кортеж:

Пример
empty = ()
print(empty)  # ()
()

Кортеж из одного элемента (обязательна запятая):

Пример
single = (42,)
print(type(single))  # <class 'tuple'>
<class 'tuple'>

Вложенные кортежи:

Пример
nested = (1, (2, 3), 4)
print(nested[1][0])  # 2
2

Срезы кортежа:

Пример
t = (0, 1, 2, 3, 4)
print(t[1:4])  # (1, 2, 3)
print(t[::-1])  # (4, 3, 2, 1, 0)
(1, 2, 3)
(4, 3, 2, 1, 0)

Конкатенация и повторение:

Пример
a = (1, 2)
b = (3, 4)
print(a + b)  # (1, 2, 3, 4)
print(a * 3)  # (1, 2, 1, 2, 1, 2)
(1, 2, 3, 4)
(1, 2, 1, 2, 1, 2)

Проверка вхождения:

Пример
print(2 in (1, 2, 3))  # True
True

Лексикографическое сравнение кортежей:

Пример
print((1, 2) < (1, 3))  # True, так как второй элемент меньше
True

Использование кортежа в качестве ключа словаря:

Пример
d = {(1, 2): "value", (3, 4): "other"}
print(d[(1, 2)])  # "value"
value

Возврат нескольких значений из функции (возвращается кортеж):

Пример
def min_max(numbers):
    return min(numbers), max(numbers)

result = min_max([1, 5, 3])
print(result)  # (1, 5)
(1, 5)

Распаковка с остатком в цикле:

Пример
data = [(1, 2, 3), (4, 5, 6, 7)]
for first, *rest in data:
    print(first, rest)
1 [2, 3]
4 [5, 6, 7]

Преобразование кортежа в строку:

Пример
t = (10, 20, 30)
result = ', '.join(map(str, t))
print(result)  # "10, 20, 30"
10, 20, 30

Использование enumerate для получения пар индекс-значение (каждая пара - кортеж):

Пример
for item in enumerate(['a', 'b', 'c']):
    print(item)
(0, 'a')
(1, 'b')
(2, 'c')

Тип tuple в Python - comments

En
тип tuple python (python)