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