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