W3docs

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

python— editable, runs on the server

Обращение к несуществующему индексу вызывает 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")
python— editable, runs on the server

Отрицательная индексация особенно удобна, когда нужно получить последний элемент без вызова 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

Операции с кортежами

Хотя изменить кортеж нельзя, можно объединять кортежи, создавая новые.

Конкатенация кортежей

Используйте + для объединения двух и более кортежей:

python— editable, runs on the server

Повторение кортежей

Используйте * для повторения кортежа заданное количество раз:

python— editable, runs on the server

Полезные методы кортежей

У кортежей есть два встроенных метода для чтения данных:

МетодЧто возвращает
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 — изменяемая альтернатива кортежам

Практика

Практика
What are the ways to access items in a Python tuple?
What are the ways to access items in a Python tuple?
Was this page helpful?