Кортежи в Python

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

В этой статье вы познакомитесь с основами кортежей Python. Мы покажем вам, как создать кортеж, получить доступ к элементам, распаковать кортеж и многое другое.

Кортежи похожи на списки с основным отличием в том, что списки изменяемы, а кортежи неизменны. Это означает, что кортежи не могут быть изменены после создания.

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

Создание кортежей

Кортежи создаются путем помещения элементов в круглые скобки [] , разделенных запятыми. В них может быть любое количество предметов, которые могут быть разных типов. Вот пример:

colors = ('orange', 'white', 'green')

Кортеж может содержать элементы со смешанными типами данных. Вы также можете объявлять вложенные кортежи, где еще одним из его элементов являются списки, кортежи или словари:

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))

Круглые скобки без элементов между ними обозначают пустой кортеж:

my_tuple = ()

Чтобы создать кортеж только с одним элементом, вы должны добавить запятую после элемента:

my_tuple = (1)
type(my_tuple)
my_tuple = (1,)
type(my_tuple)
<class 'int'>
<class 'tuple'>

Кортежи также можно создавать с помощью конструктора tuple() :

colors_list = ['orange', 'white', 'green']
colors_typle = tuple(colors_list)
print(type(colors_typle))
<class 'tuple'>

Другой способ создания кортежа — использовать функцию упаковки кортежа, которая позволяет вам создать кортеж из последовательности объектов, разделенных запятыми:

directions = "North", "South", "East", "West"
print(type(directions))
<class 'tuple'>

Доступ к элементам кортежа

На элемент кортежа можно ссылаться по его индексу. Индексы являются целыми числами и начинаются от 0 до n-1 где n — количество элементов:

my_tuple = ["a", "b", "c", "d"]
             0    1    2    3

В Python индексы указываются в квадратных скобках:

my_tuple[index]

Например, чтобы получить доступ к третьему элементу кортежа, вы должны tuple_name[2] :

directions = ("North", "South", "East", "West")directions[2]
'East'

Если вы ссылаетесь на несуществующий индекс, IndexError исключение IndexError:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: tuple index out of range

Для доступа к элементам во вложенном кортеже используйте несколько индексов:

my_tuple = (1, False, ["red", "blue"], ("foo", "bar"))my_tuple[3][1]
'bar'

Вы также можете получить доступ к элементам кортежа, используя отрицательные индексы. Последний элемент обозначается как -1 , второй последний элемент — как -2 и так далее:

my_tuple = ("a", "b", "c", "d")
            -4   -3   -2   -1
directions = ("North", "South", "East", "West")directions[-2]
'East'

Нарезка кортежей

В Python вы можете разрезать кортеж и другие последовательные типы данных, используя следующую форму:

sequence[start:stop:step]
  • start — это индекс, с которого начинается извлечение. Когда используется отрицательный индекс, он указывает смещение от конца кортежа. Если этот аргумент опущен, нарезка начинается с индекса 0.
  • stop — индекс, до которого следует завершить извлечение; результат не включает элемент «стоп». Когда используется отрицательный индекс, он указывает смещение от конца кортежа. Если этот аргумент опущен или превышает длину кортежа, нарезка выполняется до конца кортежа.
  • step — необязательный аргумент, указывающий шаг нарезки. Если не указано, по умолчанию используется 1. Если используется отрицательное значение, срез принимает элементы в обратном порядке.

Результатом нарезки кортежа является новый кортеж, содержащий извлеченные элементы.

Следующие формы допустимы в Python:

T[:] # copy whole tuple
T[start:] # slice the tuple starting from the element with index "start" to the end of the tuple.
T[:stop] # slice the tuple starting from the begging up to but not including the element with index "stop".
T[start:stop] #  slice the tuple starting from the element with index "start" up to but not including the element with index "stop".
stop"
T[::step] # slice the tuple with a stride of "step"

Ниже приведен пример того, как нарезать кортеж, начиная с элемента с индексом 1 до элемента с индексом 4, но не включая его:

vegetables = ('Potatoes', 'Garlic', 'Celery', 'Carrots', 'Broccoli')vegetables[1:4]
('Garlic', 'Celery', 'Carrots')

Распаковка кортежей

Распаковка последовательности в функции Python, которая позволяет вам назначать объекты последовательности переменным. Вот пример:

colors = ('orange', 'white', 'green')
a, b, c = colors
print(a)
print(b)
print(c)

Значения элементов кортежа в соответствии с их положением присваиваются переменным слева:

orange
white
green

При распаковке кортежей количество переменных в левом кортеже должно быть таким же, как количество элементов кортежа. В противном случае вы получите исключение ValueError

colors = ('orange', 'white', 'green')
a, b = colors
ValueError: too many values to unpack (expected 2)

Распаковка удобна, когда метод или функция возвращает последовательность объектов:

def square_area_circumference(side_lenght):
  return side_lenght * side_lenght, side_lenght * 4

area, circumference = square_area_circumference(5)

print(area)
print(circumference)
25
20

Изменение кортежа

Поскольку кортежи являются неизменяемыми структурами данных, мы не можем обновлять их напрямую. Вы не можете добавлять, изменять, удалять элементы в кортежах.

Если вы попытаетесь изменить элемент кортежа, вы получите исключение TypeError

colors = ("orange", "white", "green")
colors[1] = "blue"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Элементы изменяемого кортежа могут быть изменены. Например, если кортеж имеет список в качестве одного из его элементов, вы можете обновить элементы списка:

my_tuple = (1, 2, [5, 6, 7])
my_tuple[2][1] = 4
print(my_tuple)
(1, 2, [5, 4, 7])

Длина кортежа

Встроенная len() возвращает общее количество элементов данного объекта.

Чтобы найти длину кортежа, передайте его в качестве аргумента функции len() :

len(L)

Вот пример:

colors = ("orange", "white", "green")
lenght = len(colors)
print(lenght)
3

Итерация по кортежу

Чтобы перебрать все элементы в кортеже, вы можете использовать цикл for

directions = ("North", "South", "East", "West")
for direction in directions:
  print(direction)
North
South
East
West

Если вам нужны индексы, в вашем распоряжении есть несколько методов. Наиболее распространенные способы — комбинировать функции range() и len() или использовать встроенную функцию enumerate()

В приведенном ниже примере показано, как получить индекс и значение каждого элемента в кортеже:

directions = ("North", "South", "East", "West")
for i in range(len(directions)):
  print("Index {} : Value {}".format(i, directions[i]))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West

Вместо использования range(len(...)) вы можете использовать enumerate() для перебора кортежа более питоническим способом:

directions = ("North", "South", "East", "West")
for index, value in enumerate(directions): 
  print("Index {} : Value {}".format(index, value))
Index 0 : Value North
Index 1 : Value South
Index 2 : Value East
Index 3 : Value West

Проверить, существует ли элемент

Чтобы проверить, существует ли элемент в кортеже, вы можете использовать операторы in а not in

colors = ("orange", "white", "green")
print("orange" in colors)

Результатом будет True или False :

True

Вот еще один пример с использованием оператора if :

colors = ("orange", "white", "green")
if "blue" not in colors:
  print("no")
else:
  print("yes")
no

Кортежные методы

Объект кортежа принимает следующие методы:

  • count(x) — возвращает количество раз, когда «x» встречается в кортеже.
  • index(x) — возвращает позицию первого вхождения элемента со значением ‘x’.

Ниже приведен простой пример, показывающий, как использовать эти методы:

my_tuple = ("a", "s", "s", "q", "a", "n")
print(my_tuple.count('a'))
print(my_tuple.index('a'))
2
0

Вывод

В Python кортежи — это неизменяемые последовательности объектов, которые нельзя изменить после создания.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий