Кортежи Python

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

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

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

питон

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *