Кортежи (tuples) в Python — это упорядоченные неизменяемые коллекции объектов.
Они могут содержать элементы различных типов и служат для хранения данных, которые не должны изменяться.
В этой лекции мы рассмотрим основные особенности кортежей, их отличия от списков, а также способы конвертации между кортежами и списками.
Кортежи создаются с использованием круглых скобок или просто перечислением элементов через запятую:
# Пустой кортеж
empty_tuple = ()
# Кортеж с элементами
example_tuple = (1, 2, 3)
# Кортеж без круглых скобок (packing)
packed_tuple = 4, 5, 6
# Кортеж из одного элемента (необходимо добавить запятую)
single_element_tuple = (42,)
Неизменяемость:
Главная особенность кортежей заключается в их неизменяемости. После создания кортежа его элементы нельзя изменить, добавить или удалить.
example_tuple = (1, 2, 3)
# Попытка изменить элемент вызовет ошибку
# example_tuple[0] = 10 # TypeError: 'tuple' object does not support item assignment
Упорядоченность:
Кортежи сохраняют порядок элементов, как и списки.
days_of_week = ("Monday", "Tuesday", "Wednesday", "Thursday", "Friday")
print(days_of_week[0]) # "Monday"
Поддержка разных типов данных:
В кортежах можно хранить элементы разных типов, как и в списках.
mixed_tuple = (1, "two", 3.0, [4, 5])
С кортежами можно выполнять большинство операций, которые доступны для списков:
Доступ по индексу:
example_tuple = (10, 20, 30)
print(example_tuple[1]) # 20
Срезы (slicing):
example_tuple = (10, 20, 30, 40, 50)
print(example_tuple[1:4]) # (20, 30, 40)
Объединение и повторение:
tuple1 = (1, 2)
tuple2 = (3, 4)
combined = tuple1 + tuple2
print(combined) # (1, 2, 3, 4)
repeated = tuple1 * 3
print(repeated) # (1, 2, 1, 2, 1, 2)
Проверка наличия элемента:
example_tuple = (10, 20, 30)
print(20 in example_tuple) # True
print(40 in example_tuple) # False
Многие функции, доступные для списков, также работают с кортежами:
Вот таблица, описывающая основные функции и методы для работы с кортежами в Python.
Функция/Метод | Описание | Пример использования | Результат |
---|---|---|---|
len(tuple) | Возвращает количество элементов в кортеже. | len((1, 2, 3)) | 3 |
tuple[index] | Доступ к элементу по индексу. | t = (1, 2, 3) t[1] | 2 |
tuple.count(x) | Возвращает количество вхождений элемента x в кортеже. | (1, 2, 3, 1).count(1) | 2 |
tuple.index(x) | Возвращает индекс первого вхождения элемента x в кортеже. | (1, 2, 3).index(2) | 1 |
tuple + tuple | Конкатенация (соединение) кортежей. | (1, 2) + (3, 4) | (1, 2, 3, 4) |
tuple * n | Повторяет кортеж n раз. | (1, 2) * 3 | (1, 2, 1, 2, 1, 2) |
x in tuple | Проверяет, содержит ли кортеж элемент x . | 3 in (1, 2, 3) | True |
min(tuple) | Возвращает минимальный элемент в кортеже. | min((1, 2, 3)) | 1 |
max(tuple) | Возвращает максимальный элемент в кортеже. | max((1, 2, 3)) | 3 |
sum(tuple) | Возвращает сумму элементов в кортеже (если элементы числовые). | sum((1, 2, 3)) | 6 |
Изменяемость:
Главное отличие между кортежами и списками — неизменяемость кортежей. Списки можно изменять, добавлять или удалять элементы, а кортежи остаются неизменными после создания.
example_list = [1, 2, 3]
example_list[0] = 10 # Это работает
example_tuple = (1, 2, 3)
# example_tuple[0] = 10 # Это вызовет ошибку
Производительность:
Кортежи работают быстрее списков, особенно при операциях доступа или хранения, что обусловлено их неизменяемостью.
import timeit
# Сравним скорость доступа
print(timeit.timeit("x[1]", setup="x = (1, 2, 3)"))
print(timeit.timeit("x[1]", setup="x = [1, 2, 3]"))
Использование в качестве ключей словарей:
Кортежи могут использоваться в качестве ключей в словарях, так как они хешируемы. Списки, будучи изменяемыми, использоваться в качестве ключей не могут.
# Кортеж как ключ в словаре
my_dict = {(1, 2): "value"}
print(my_dict[(1, 2)]) # value
# Список в качестве ключа вызовет ошибку
# my_dict = {[1, 2]: "value"} # TypeError: unhashable type: 'list'
Конвертация кортежа в список:
Для преобразования кортежа в список используется функция list()
.
example_tuple = (10, 20, 30)
example_list = list(example_tuple)
print(example_list) # [10, 20, 30]
Конвертация списка в кортеж:
Для преобразования списка в кортеж используется функция tuple()
.
example_list = [10, 20, 30]
example_tuple = tuple(example_list)
print(example_tuple) # (10, 20, 30)
Кортежи в Python — это эффективный инструмент для работы с неизменяемыми коллекциями данных. Они обладают многими функциями, аналогичными спискам, но их неизменяемость и возможность использования в качестве ключей словарей делают их незаменимыми в ряде случаев. Понимание, когда использовать кортежи, а когда списки, помогает создавать более эффективные и безопасные программы.