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

>>> tup[4]
'trees'
>>> tup[1:4]
('water', 'dirt', 'snow')
>>> tup[1:5:2]
('water', 'snow')
>>> tup=('ice', 'water', 'dirt', 'snow', 'trees')
>>> tup[::-1]
('trees', 'snow', 'dirt', 'water', 'ice')
>>> tup[3]
'snow'

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

>>> tup
('ice', 'water', 'dirt', 'snow', 'trees')
>>> 'ice' in tup
True
>>> 'mud' in tup
False

У кортежей есть преимущества.

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

Уникальное поведение

при вводе объектов, разделенных запятыми, во время сеанса python REPL он автоматически помещает их в кортеж.

>>> twelve=12
>>> 'one','two','three',twelve
('one', 'two', 'three', 12)

Когда в кортеже есть только один элемент, python интерпретирует его либо как целое число, либо как строку, а не как кортеж.

>>> t=(12)
>>> type(t)
<class 'int'>
>>> t=('twelve')
>>> type(t)
<class 'str'>

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

>>> t=(12,)
>>> type(t)
<class 'tuple'>
>>> t=('twelve',)
>>> type(t)
<class 'tuple'>

Последовательность распаковки

распаковка кортежа относится к назначению переменных отдельным элементам кортежа в одном пакетном назначении. Заметной особенностью распаковки является то, что новые элементы, которые должны быть назначены, находятся слева от оператора =, а исходный определенный объект — справа. Единственное условие для распаковки состоит в том, что переменные должны совпадать с количеством элементов по обе стороны от оператора =.

>>> tup
('ice', 'water', 'dirt', 'snow', 'trees')
>>> (t1,t2,t3,t4,t5)=tup
>>> t1
'ice'
>>> t5
'trees'

Обмен

Иногда возникает необходимость поменять местами определения двух переменных. Python делает это легко.

>>> tup1=('fruits',)
>>> tup2=('vegetables',)
>>> tup1,tup2
(('fruits',), ('vegetables',))
>>> tup1,tup2=tup2,tup1
>>> tup1,tup2
(('vegetables',), ('fruits',))

Встроенный метод tuple()

существует также встроенная функция tuple(), которая превращает объекты в кортежи. tuple() работает со строками, списками и словарями.

>>> tuple('strings')
('s', 't', 'r', 'i', 'n', 'g', 's')
>>> fruit
['apples', 'oranges', 'grapes', 'pears', 'melon', 'berries']
>>> tuple(fruit)
('apples', 'oranges', 'grapes', 'pears', 'melon', 'berries')
>>> tuple(['lists'])
('lists',)
>>> tuple({'test':1,'tear':2})
('tear', 'test')

Вложенная структура

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

>>> tup1 = ('vegetables','fruit')
>>> tup2 = ('one',tup1)
>>> tup2
('one', ('vegetables', 'fruit'))

Изменяемые элементы

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

>>> tup1 =([1,2,3],[4,5,6])
>>> tup1[0].append(4)
>>> tup1
([1, 2, 3, 4], [4, 5, 6])

Методы кортежей

  • count()метод count возвращает количество вхождений определенного элемента в кортеж.
>>> fruits=tuple('bananas and apples')
>>> fruits
('b', 'a', 'n', 'a', 'n', 'a', 's', ' ', 'a', 'n', 'd', ' ', 'a', 'p', 'p', 'l', 'e', 's')
>>> fruits.count('n')
3
>>> fruits.count('a')
5
  • index()метод index() возвращает индекс определенного элемента в кортеже.
>>> tup=('ice', 'water', 'dirt', 'snow', 'trees')
>>> tup.index('ice')
0
>>> tup.index('water')
1
>>> tup.index('fire')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: tuple.index(x): x not in tuple
>>> tup2= (1,2,3,(1,2,3,),4)
>>> tup2.index((1,2,3,))
3
>>> tup2[3].index((3))
2
  • any() и all()метод any() проверяет, состоит ли весь кортеж из утверждений «False». Метод all() проверяет, является ли какой-либо из элементов утверждением «False».
>>> tup3=('a','cat',33, tup1, False)
>>> any(tup3)
True
>>> tup4=(False, False)
>>> any(tup4)
False
>>> tup3=('a','cat',33, tup1)
>>> all(tup3)
True
>>> tup3=('a','cat',33, tup1, False)
>>> all(tup3)
False
  • enumerate()метод перечисления может добавлять числовое значение к каждому элементу кортежа.
>>> tup
('ice', 'water', 'dirt', 'snow', 'trees')
>>> enumerate(tup)
<enumerate object at 0x7f10502d1d38>
>>> list(enumerate(tup))
[(0, 'ice'), (1, 'water'), (2, 'dirt'), (3, 'snow'), (4, 'trees')]
>>> for count, item in enumerate(tup):
...     print(count, item)
... 
0 ice
1 water
2 dirt
3 snow
4 trees
>>> for count, item in enumerate(tup, 50):
...     print(count, item)
... 
50 ice
51 water
52 dirt
53 snow
54 trees
  • iter()в сочетании с методом next(), iter() будет индивидуально перебирать кортеж.
>>> tup=('ice', 'water', 'dirt', 'snow', 'trees')
>>> list(filter(None,tup))
['ice', 'water', 'dirt', 'snow', 'trees']
>>> tups=iter(tup)
>>> next(tups)
'ice'
>>> next(tups)
'water'
>>> next(tups)
'dirt'
>>> next(tups)
'snow'
  • len() возвращает количество элементов в кортеже.
>>> tup
('ice', 'water', 'dirt', 'snow', 'trees')
>>> len(tup)
5
  • max() и min() будут работать только с кортежем всех целых чисел или букв. Функция max() возвращает наибольшее число или слово, начинающееся с ближайшей к z буквы. Метод min() делает обратное.
>>> tup
('ice', 'water', 'dirt', 'snow', 'trees')
>>> max(tup)
'water'
>>> min(tup)
'dirt'
>>> tup2=(1,2,3,4,5)
>>> max(tup2)
5
>>> min(tup2)
1