Кортежи в 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 кортежи — это неизменяемые последовательности объектов, которые нельзя изменить после создания.

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



2021-03-04T12:13:15
Python