Работа с кортежами в Python — практически ничем не отличается от работы со списками. Кортежи и списки формируется одинаково, нет никаких различий. Самая главная разница в этих двух типах данных, заключается в том, что элементы списка могут меняться, а элементы кортежа не могут.
Как создать кортеж?
Как я уже говорил, кортеж создается так же как и список, с той лишь разницей, что список заключается в квадратные скобки, а кортеж в круглые.
Кортеж, так же как и список может иметь любое количество элементов, и они могут быть разных типов (целое число, десятичное, строки, списки). Если вы посмотрите на тип данных кортежа через функцию type(), то мы с вами увидим, что нам вернется значение tuple, а список возвращает нам как вы помните list.
tuple = (1,2,3) print(tuple) Результат: (1,2,3) tuple2=("hello",1,2,3) print(tuple2) Результат: ('hello',1,2,3) tuple3 = ("hello",1,2,3,[10,11,13]) print(tuple3) Результат: ("hello",1,2,3,[10,11,12])
Упаковка кортежа
Кортеж в отличии от списка, так же может быть создан и без скобок.
tuple = 1,2.3,"hello" print(tuple) Результат: (1,2.3,"hello") #Распаковка кортежа a,b,c = tuple print(a) print(b) print(c) Результат: 1 2.3 hello
При создании кортежа с одним элементом, нельзя оставлять просто один элемент в скобках. Необходимо в конце элемента указать запятую, что бы Python понял что это именно кортеж, если мы не укажем запятую, то для Python это будет просто строка.
tuple = ("hello") print(type(tuple)) # <class 'str'> tuple = ("hello",) print(type(tuple)) # <class 'tuple'>
Изменение кортежа
Как я уже ранее писал, кортеж это не изменяемая штука. Но все же можно изменить элементы внутри кортежа, при условии, что тип данных элемента внутри кортежа является изменяемым, например список.
tuple = (1,2,3, [6,5]) tuple[3][0] = 9 # Первый элемента вложенного списка в кортеж print(tuple) Результат: (1,2,3[9,5])
Как и со списками, мы можем использовать оператор конкатенации +, и оператор повторения *. При использовании этих операторов, учитывайте, что на выходе у вас будет новый кортеж.
print((1,2,3) + (4,5,6)) print(("Повтор",) * 3) Результат: (1,2,3,4,5,6) ("Повтор","Повтор","Повтор")
Удаление кортежа
Как мы уже обсуждали выше, изменить или удалить элементы из кортежа у вас не получится, но удалить полностью сам кортеж можно с помощью ключевого слова del.
tuple = (1,2,3,4,54,56) del tuple print(tuple) Результат: NameError: name 'my_tuple' is not defined
В целом во всем остальном, списки и кортежи полностью идентичны в плане, проведения с ними операций. Срезы, индексация, отрицательная индексация, проверка на наличие элемента в кортеже, итерация по кортежу, все это делается так же как и со списками.
Преимущество кортежа перед списком
Поскольку кортежи и списки очень похожи друг на друга, многие не понимают где какой из вариантов последовательностей использовать. Но, как бы они не были похожи, все же кортежи имеет небольшие преимущества по сравнению со списками.
- Неизменяемость элементов внутри кортежа делает итерацию внутри него быстрее чем по списку. Таким образом немного повышается производительность
- Кортежи содержащие неизменяемые элементы, могут быть использованы как ключи для словаря. Как вы понимаете со списком такой трюк невозможен
- Если в вашей программе есть данные, которые не меняются, то реализация их в кортеже будет гарантировать вам, что они останутся в безопасности, и перезапись им не грозит.