Кортежи в 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)

Вывод:

Привет, Андрей
Привет, Маша

Преимущества кортежа над списком

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

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©