Статью подготовили специалисты образовательного сервиса Zaochnik
Создание и особенности работы с кортежами в Python
- 24 марта 2025
- 6 минут
- 26
Кортеж — это неизменяемый набор данных. После его создания структуру кортежа изменить невозможно.
>>> a_tuple = ("a", "b", "mpilgrim", "z", "example") # (1)
>>> a_tuple
('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple[0] # (2)
'a'
>>> a_tuple[-1] # (3)
'example'
>>> a_tuple[1:3] # (4)
('b', 'mpilgrim')
```
Создание кортежа и порядок элементов
Создание кортежа аналогично созданию списка, но элементы заключаются в круглые скобки вместо квадратных. Элементы кортежа имеют фиксированный порядок, подобно спискам, и индексация начинается с нуля. То есть первый элемент кортежа — это `a_tuple[0]`. Отрицательные индексы отсчитываются от конца кортежа, так что последний элемент имеет индекс -1.
Срезы (slicing) в кортежах работают так же, как и в списках: срез кортежа создает новый кортеж, аналогично тому, как срез списка создает новый список.
Однако можно создать срез кортежа, что приведет к образованию нового кортежа.
# продолжение предыдущего примера
>>> a_tuple # ('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple.append("new") # (1)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
>>> a_tuple.remove("z") # (2)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'remove'
>>> a_tuple.index("example") # (3)
4
>>> "z" in a_tuple # (4)
True
```
Особенности
- Вы не можете добавлять элементы в кортежи, поскольку у них отсутствуют методы `append()` или `extend()`.
- Удаление элементов также невозможно, так как кортежи не имеют методов `remove()` или `pop()`.
- Тем не менее, вы можете искать элементы в кортеже, используя оператор `in` для проверки их существования.
Применение кортежей
Кортежи могут быть быстрее, чем списки, хотя такие оптимизации требуют дополнительного анализа в каждом конкретном случае. Они обеспечивают безопасное использование данных, которые не должны изменяться. Кортежи могут использоваться как элементы множества и ключи словаря, так как содержат неизменяемые значения (строки, числа и другие кортежи). Списки в качестве ключей не применимы, так как они изменяемы.
Кортежи могут быть преобразованы в списки и наоборот. Функция `tuple()` преобразует список в кортеж, тогда как `list()` превращает кортеж обратно в список. В этом контексте можно сказать, что `tuple()` "замораживает" список, а `list()` "размораживает" кортеж.
Кортежи в логическом контексте
Кортежи могут использоваться в логических выражениях, например, в условии if.
>>> def is_it_true(anything):
... if anything:
... print("да, это истина")
... else:
... print("нет, это ложь")
...
>>> is_it_true(()) # (1)
нет, это ложь
>>> is_it_true(('a', 'b')) # (2)
да, это истина
>>> is_it_true((False,)) # (3)
да, это истина
>>> type((False)) # (4)
<class 'bool'>
>>> type((False,)) # <---- обратите внимание на запятую
<class 'tuple'>
```
В логическом контексте пустой кортеж трактуется как ложное значение, тогда как любой непустой кортеж рассматривается как истинное. При этом важно отметить, что для создания кортежа из одного элемента необходимо добавить запятую; без неё Python просто рассматривает это как вложенные скобки, что не создает кортежа.
Присваивание нескольких значений
В Python можно использовать кортежи для одновременного присвоения значений нескольким переменным.
>>> v = ('a', 2, True)
>>> (x, y, z) = v # (1)
>>> x
'a'
>>> y
2
>>> z
True
```
Здесь `v` — кортеж из трех элементов, а `(x, y, z)` — кортеж из трех переменных. При сопоставлении присваивается значение из `v` каждой переменной по порядку.
Такой подход может использоваться и для быстрой инициализации последовательных значений:
>>> (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
>>> MONDAY
0
>>> TUESDAY
1
>>> SUNDAY
6
```
Возврат нескольких значений из функции
Используя присваивание нескольким переменным, можно создать функции, которые возвращают несколько значений, просто вернув кортеж с этими значениями. В точке вызова функции можно использовать возвращаемое значение как целый кортеж или присвоить его отдельным переменным.
Сохранить статью удобным способом