0 знаков
31. Более подробно о кортежах в Python
Кратко- Кортежи в Python используются для хранения неизменяемых данных.
- Кортежи являются неизменяемой структурой, но только "первый уровень" элементов является неизменным.
- Кортежи не имеют многих методов списков, таких как
sort()
иappend()
, но к ним может применяться функцияsorted()
, которая возвращает новый список.- Срезы также работают для кортежей.
- Рекомендуется использовать кортежи вместо списков для сокращения ресурсов и предотвращения непредвиденных ситуаций.
В предыдущем уроке мы кратко пробежались по кортежам в языке Python. В этом уроке постараемся приобрести понимания необходимости использовать кортежи, вместо списков. Кратко говоря, разберемся с тем, зачем эти кортежи вообще нужны.
Немного историиНачнем с краткой исторической справки появления кортежей. Создатель языка Python (Гвидо ван Россум) математик по образованию. Вероятно, это распространенное понятие из математики перекочевало в Python. Всё, больше нечего добавить.
Вообще, кортежи очень распространены, просто используются неявно. Например, список аргументов функции, это кортеж:
print("Hello", "World")
# равнозначный код
t = ("Hello", "World")
print(*t)
В этом примере мы использовали оператор распаковки (*
), к нему вернемся позже, когда познакомимся с созданием функций в Python. Сейчас речь не о нем.
Инициализацию списка можно тоже считать кортежем:
l = [*("Hello", "World")]
Даже обычный блок кода, это кортеж в каком-то роде. К слову о неявном применении кортежей. Они могут инициализироваться без скобок, например:
t = "Hello", "World"
type(t) # => <class 'tuple'>
Кортежи могут быть использованы в роли ключей словаря, в отличие от списков, так как последние принадлежат к изменяемым структурам:
d = { (0, 1): 1, (-1, 0): 2 }
Кортежи – неизменяемая структура. Это означает, что элементы кортежа не могут быть изменены, но есть особенность. Только «первый уровень» элементов является неизменным. Например, создадим кортеж и попробуем изменить элемент:
t = (1, 2, [3, 4], 5)
t[2] = 6
В таком случае возникнет исключение TypeError
. Об исключениях поговорим совсем скоро.
Traceback (most recent call last):
File "C:/test.py", line 2, in <module>
t[2] = 6
TypeError: 'tuple' object does not support item assignment
Теперь попробуем изменить список, который находится в кортеже под индексом 2
:
t = (1, 2, [3, 4], 5)
t[2][1] = 6
print(t) # => (1, 2, [3, 6], 5)
В результате, изменение прошло успешно. Это важный момент в понимании «неизменяемости» кортежа. Кортежи хранят ссылки на элементы (которые, в свою очередь, могут быть как изменяемые, так и не изменяемые).
Как вы вероятно догадались, кортежи не имеют многих методов списков, которые изменяют их, например, методов sort()
и append()
. Если вы помните, в уроке о сортировке списков мы говорили о функции sorted()
, которая применима для всех итерируемых объектов, включая кортежи:
t = (3, 2, 6, 1, 4)
sorted(t) # => [1, 2, 3, 4, 6]
Обратите внимание, функция sorted()
не изменяет текущий объект, а возвращает новый, в данном случае – список.
Срезы, о которых мы говорили ранее, так же работают для кортежей:
t = (3, 2, 6, 1, 4)
t[1:3] # => (2, 6)
Подведем итог этого немного несвязного и тезисного урока: если есть возможность использовать кортежи вместо списков, то используйте, так как это сократит используемые ресурсы и убережет от непредвиденных ситуаций.
Мы закончили раздел «Структуры данных в Python» и настало время подводить итоги. В следующем разделе продолжим изучение циклов.
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ