Кортежи Python: обзор
Узнайте, как получать элементы кортежа Python с помощью положительной и отрицательной индексации, срезов и вложенного доступа, с примерами.
На этой странице объясняется, как считывать данные из кортежа Python. Вы узнаете о положительной индексации, отрицательной индексации, срезах, доступе к вложенным кортежам, операторе in и встроенной функции len(). Также рассматривается, когда кортежи предпочтительнее списков.
Что такое кортеж?
Кортеж — это упорядоченная неизменяемая последовательность значений. «Упорядоченная» означает, что каждый элемент занимает фиксированную позицию, к которой можно обратиться по индексу. «Неизменяемая» означает, что после создания нельзя изменять, добавлять или удалять элементы — именно это делает кортежи полезными там, где важна целостность данных.
# Create a tuple with parentheses
colors = ("red", "green", "blue")
# The built-in tuple() function works too
digits = tuple([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])Обо всём, что можно сделать при создании кортежа, читайте в главе Python Tuples.
Доступ к элементам по индексу
Как и списки, кортежи используют нулевую индексацию: первый элемент находится по индексу 0, второй — по 1 и так далее.
Index: 0 1 2
| | |
colors = ("red", "green", "blue")Синтаксис: tuple_name[index]
Обращение к несуществующему индексу вызывает IndexError:
colors = ("red", "green", "blue")
print(colors[5]) # IndexError: tuple index out of rangeОтрицательная индексация
Python позволяет отсчитывать элементы с конца кортежа с помощью отрицательных чисел. Индекс -1 — это последний элемент, -2 — предпоследний и так далее.
Index: 0 1 2
Neg idx: -3 -2 -1
| | |
colors = ("red", "green", "blue")Отрицательная индексация особенно удобна, когда нужно получить последний элемент без вызова len().
Срезы кортежа
Срез извлекает подкортеж. Синтаксис: tuple_name[start:stop], где start включается, а stop — нет.
fruits = ("apple", "banana", "cherry", "date", "elderberry")
print(fruits[1:3]) # ('banana', 'cherry') — index 1 up to (not including) 3
print(fruits[:3]) # ('apple', 'banana', 'cherry') — from beginning to index 3
print(fruits[2:]) # ('cherry', 'date', 'elderberry') — from index 2 to end
print(fruits[:]) # entire tuple (useful for shallow copy)В качестве третьего аргумента можно указать шаг: tuple_name[start:stop:step].
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(numbers[::2]) # (0, 2, 4, 6, 8) — every second element
print(numbers[::-1]) # (9, 8, 7, 6, 5, 4, 3, 2, 1, 0) — reversedСрез всегда возвращает новый кортеж — исходный никогда не изменяется.
Получение длины с помощью len()
len() возвращает количество элементов в кортеже.
fruits = ("apple", "banana", "cherry", "date", "elderberry")
print(len(fruits)) # 5Это полезно для защиты от IndexError или для итерации с помощью range():
for i in range(len(fruits)):
print(i, fruits[i])
# 0 apple
# 1 banana
# 2 cherry
# 3 date
# 4 elderberryПроверка вхождения с помощью in
Оператор in проверяет, существует ли значение в кортеже, и возвращает True или False.
fruits = ("apple", "banana", "cherry")
print("banana" in fruits) # True
print("mango" in fruits) # False
print("mango" not in fruits) # TrueИспользуйте in вместо перехвата исключения, когда нужно просто проверить наличие значения.
Доступ к вложенным кортежам
Кортежи могут содержать другие кортежи. Чтобы обратиться к элементу внутри вложенного кортежа, нужно последовательно применять квадратные скобки.
matrix = ((1, 2), (3, 4), (5, 6))
print(matrix[0]) # (1, 2)
print(matrix[0][1]) # 2 — row 0, column 1
print(matrix[2][0]) # 5 — row 2, column 0Та же техника работает при смешанной вложенности, например кортеже из строк и чисел:
record = ("Alice", 30, ("Python", "SQL"))
print(record[0]) # Alice
print(record[2]) # ('Python', 'SQL')
print(record[2][0]) # PythonОперации с кортежами
Хотя изменить кортеж нельзя, можно объединять кортежи, создавая новые.
Конкатенация кортежей
Используйте + для объединения двух и более кортежей:
Повторение кортежей
Используйте * для повторения кортежа заданное количество раз:
Полезные методы кортежей
У кортежей есть два встроенных метода для чтения данных:
| Метод | Что возвращает |
|---|---|
tuple.count(value) | Количество вхождений value в кортеж |
tuple.index(value) | Индекс первого вхождения value |
colors = ("red", "green", "blue", "red", "red")
print(colors.count("red")) # 3
print(colors.index("green")) # 1Полный справочник см. в главе Tuple Methods.
Когда использовать кортеж вместо списка
| Ситуация | Кортеж | Список |
|---|---|---|
| Данные не должны изменяться (координаты, значения RGB, строки базы данных) | Да | Нет |
| Используется как ключ словаря | Да | Нет — списки не являются хешируемыми |
| Небольшое преимущество по памяти и скорости для данных только для чтения | Да | Нет |
| Нужно добавлять, удалять или сортировать | Нет | Да |
Если вам нужно изменить кортеж, обратитесь к главе Update Tuples, где описан распространённый способ: конвертация в список и обратно.
Связанные темы
- Python Tuples — создание кортежей, одноэлементные кортежи, конструктор
tuple() - Unpack Tuples — присвоение элементов кортежа переменным в одну строку
- Loop Tuples — итерация по кортежу с
forиwhile - Update Tuples — способы изменения содержимого кортежа
- Join Tuples — конкатенация и техника
sum() - Tuple Methods — подробно о
count()иindex() - Python Lists — изменяемая альтернатива кортежам