Кортежи в Python
В этой статье вы узнаете всё о кортежах в Python. Что такое кортежи, как их создавать, когда их использовать и какие существуют методы кортежей.
Кортеж в Python похож на список. Только в отличие от списка кортеж — неизменяемый, то есть менять его элементы после создания нельзя.
Как создать кортеж
Чтобы создать кортеж, нужно поместить все элементы, разделенные запятыми, в круглые скобки ()
. Скобки не обязательны, но рекомендуем их использовать.
Кортеж может иметь любое количество элементов разных типов (целые числа, числа с плавающей точкой, списки, строки и т. д).
# Разные типы кортежей
# Пустой кортеж
my_tuple = ()
print(my_tuple)
# Кортеж с целыми числами
my_tuple = (1, 2, 3)
print(my_tuple)
# Кортеж с разными типами данных
my_tuple = (1, "Привет", 3.4)
print(my_tuple)
# Вложенный кортеж
my_tuple = ("мышь", [8, 4, 6], (1, 2, 3))
print(my_tuple)
Вывод:
()
(1, 2, 3)
(1, 'Привет', 3.4)
('мышь', [8, 4, 6], (1, 2, 3))
Кортеж можно создать и без использования скобок. Это называется упаковкой кортежа.
# упаковываем кортеж
my_tuple = 3, 4.6, "собака"
print(my_tuple)
# точно так же можно распаковать кортеж
a, b, c = my_tuple
print(a) # 3
print(b) # 4.6
print(c) # собака
Вывод:
(3, 4.6, 'собака')
3
4.6
собака
Если нужно создать кортеж с одним элементом, все немного сложнее. Дело в том, что одного элемента в круглых скобках недостаточно. Понадобится добавить в конец запятую — иначе Python не поймет, что это кортеж.
my_tuple = ("привет")
print(type(my_tuple)) # <class 'str'>
# Создаем кортеж с одним элементом
my_tuple = ("привет",)
print(type(my_tuple)) # <class 'tuple'>
# Можно и без скобок
my_tuple = "привет",
print(type(my_tuple)) # <class 'tuple'>
Вывод:
<class 'str'>
<class 'tuple'>
<class 'tuple'>
Как получить элемент кортежа
1. По индексу
Мы можем использовать оператор индекса []
, чтобы получить доступ к элементу кортежа.
Примечание. Обратите внимание, что индексирование кортежа начинается с 0. То есть первый элемент кортежа имеет индекс 0.
Кортеж из 9 элементов будет иметь индексы от 0 до 8. Попытка получить доступ к индексу за пределами диапазона индексов кортежа (в нашем случае 9, 10 и т. д.) приведет к ошибке IndexeError.
Индекс должен быть целым числом, поэтому мы не можем использовать float или другие типы в качестве индекса. Это приведет к ошибке TypeError.
Точно так же доступ к вложенным кортежам осуществляется с помощью вложенной индексации, как показано в примере ниже.
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
print(my_tuple[0]) # 'c'
print(my_tuple[5]) # 'h'
# Вызов print(my_tuple[9]) приведет к ошибке
# IndexError: list index out of range
# Вызов my_tuple[2.0] приведет к ошибке
# TypeError: list indices must be integers, not float
# Индекс должен быть целым числом
# вложенный кортеж
n_tuple = ("мышь", [8, 4, 6], (1, 2, 3))
# вложенное индексирование
print(n_tuple[0][3]) # 'ь'
print(n_tuple[1][1]) # 4
Вывод:
c
h
ь
4
2. По отрицательному индексу
Python допускает отрицательную индексацию коллекций (наборов значений). Она работает и с кортежами.
Индекс -1 отсылает к последнему элементу, -2 — ко второму элементу с конца и так далее.
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
# Вывод: 'k'
print(my_tuple[-1])
# Вывод: 'c'
print(my_tuple[-9])
Вывод:
k
c
3. С помощью срезов
Получить доступ к диапазону элементов в кортеже можно с помощью оператора срезов :
.
Использование срезов еще называют слайсингом, от английского slicing — «нарезка».
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
# элементы со 2 по 4
# Вывод: ('o', 'd', 'e')
print(my_tuple[1:4])
# элементы от начала и до второго элемента
# Вывод: ('c', 'o')
print(my_tuple[:-7])
# два последних элемента
# Вывод: ('c', 'k')
print(my_tuple[7:])
# все элементы от начала до конца
# Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
print(my_tuple[:])
Вывод:
('o', 'd', 'e')
('c', 'o')
('c', 'k')
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
Как изменить кортеж
Никак. В отличие от списков, кортежи неизменяемы. Это значит, что элементы кортежа нельзя изменять после добавления в кортеж. Однако если элемент сам по себе является изменяемым типом данных (например, списком), его вложенные элементы менять уже можно.
Переназначить кортеж тоже можно.
my_tuple = (4, 2, 3, [6, 5])
# my_tuple[1] = 9
# Эта строка приведет к ошибке
# TypeError: 'tuple' object does not support item assignment
# Значения изменяемого элемента менять можно
my_tuple[3][0] = 9 # Вывод: (4, 2, 3, [9, 5])
print(my_tuple)
# Можно переназначить кортеж
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
# Вывод: ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
print(my_tuple)
Вывод:
(4, 2, 3, [9, 5])
('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
В Python кортежи можно объединить с помощью оператора +
. Это называется конкатенацией.
С помощью оператора *
можно повторить элементы в кортеже заданное количество раз.
Оба оператора +
и *
приводят к созданию нового кортежа.
# Конкатенация
#Вывод: (1, 2, 3, 4, 5, 6)
print((1, 2, 3) + (4, 5, 6))
# Повторение
# Вывод: ('Повторить', 'Повторить', 'Повторить')
print(("Повторить",) * 3)
Вывод:
(1, 2, 3, 4, 5, 6)
('Повторить', 'Повторить', 'Повторить')
Как удалить кортеж
Изменять элементы кортежа нельзя. Это значит, что удалять их тоже нельзя.
В Python можно только полностью удалить кортеж — с помощью ключевого слова del
.
my_tuple = ('c', 'o', 'd', 'e', 'c', 'h', 'i', 'c', 'k')
# нельзя удалить элементы кортежа
# TypeError: 'tuple' object doesn't support item deletion
# del my_tuple[3]
# зато можно удалить кортеж полностью
del my_tuple
# вызов приведет к ошибке NameError: name 'my_tuple' is not defined
print(my_tuple)
Вывод:
Traceback (most recent call last):
File "<string>", line 12, in <module>
NameError: name 'my_tuple' is not defined
Методы кортежа
Методы добавления или удаления элементов недоступны для кортежа в силу его неизменяемости.
Для кортежа существует только два метода: .count()
и .index()
.
my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',)
print(my_tuple.count('о')) # Вывод: 2
print(my_tuple.index('к')) # Вывод: 4
Вывод:
2
4
Другие операции с кортежами
1. Проверка на вхождение в кортеж
Мы можем проверить, существует ли тот или иной элемент в кортеже или нет, с помощью ключевого слова in
и not in
.
my_tuple = ('я', 'б', 'л', 'о', 'к', 'о',)
print('я' in my_tuple)
print('х' in my_tuple)
print('п' not in my_tuple)
Вывод:
True
False
True
2. Итерирование по кортежу
Для перебора элементов кортежа можно использовать цикл for
.
for name in ('Андрей', 'Маша'):
print("Привет, ", name)
Вывод:
Привет, Андрей
Привет, Маша
Преимущества кортежа над списком
Кортежи очень похожи на списки, поэтому они используются в похожих ситуациях. Выбор зависит от задачи. В одном случае эффективнее будет работать кортеж, а в другом — не обойтись без списка.