
В 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 )
Кортежи также можно создавать с помощью конструктора tuple() :
colors_list = [ 'orange' , 'white' , 'green' ] colors_typle = tuple ( colors_list ) print ( type ( colors_typle ))
Другой способ построения кортежа — использование функции упаковки кортежей, которая позволяет создать кортеж из последовательности объектов, разделенных запятыми:
directions = "North" , "South" , "East" , "West" print ( type ( directions ))
Доступ к элементам кортежа
На элемент кортежа можно ссылаться по его индексу. Индексы представляют собой целые числа от 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 :
Traceback (most recent call last): File "", line 1, in 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— это индекс, до которого следует завершить извлечение; элемент «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 "", line 1, in 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() для обхода кортежа более привычным для Python способом:
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 кортежи — это неизменяемые последовательности объектов, которые нельзя изменить после создания.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства