В этой статье мы узнаем о ключевых различиях между списком и кортежами и о том, как использовать эти две структуры данных.
Списки и кортежи хранят один или несколько объектов или значений в определенном порядке. Объекты, хранящиеся в списке или кортеже, могут быть любого типа, включая тип ничего, определенный ключевым словом None.
Списки и кортежи похожи в большинстве случаев, но есть некоторые различия, которые мы собираемся найти в этой статье.
Различия в синтаксисе
Синтаксис списка и кортежа немного отличается. Списки заключаются в квадратные скобки, ()
а кортежи заключаются в круглые скобки ()
.
Пример 1.1: Создание списка и создание кортежа
list_num = (1,2,3,4) tup_num = (1,2,3,4) print(list_num) print(tup_num)
Вывод:
(1,2,3,4) (1,2,3,4)
Выше мы определили переменную с именем list_num, которая содержит список чисел от 1
до 4
. Список заключен в квадратные скобки ()
. Также мы определили переменную tup_num; который содержит набор чисел от 1
до 4
. Кортеж заключен в круглые скобки ()
.
В Python у нас есть type()
функция, которая определяет тип созданного объекта.
Пример 1.2: Найти тип структуры данных с помощью функции type ()
type(list_num) type(tup_num)
Вывод:
список кортежей
Изменяемый список против неизменяемых кортежей
Список имеет изменяемую природу, то есть список может быть изменен или модифицирован после его создания в соответствии с потребностями, тогда как кортеж имеет неизменяемую природу, т.е. кортеж не может быть изменен или модифицирован после его создания.
Пример 2.1: изменение списка элементов и кортежа
list_num(2) = 5 print(list_num) tup_num(2) = 5
Вывод:
(1,2,5,4) Traceback (последний вызов последним): файл «python», строка 6, в TypeError: объект 'tuple' не поддерживает назначение элементов
В приведенном выше коде мы присвоили 5
list_num индекс 2
и нашли 5
индекс 2
в выводе. Также мы присвоили 5
tup_num по индексу 2
и получили type error
. Мы не можем изменить кортеж из-за его неизменности.
Примечание. Поскольку кортежи неизменны, они имеют фиксированный размер, а размер списка - переменный.
Доступные операции
Lists имеет больше встроенных функций, чем tuple. Мы можем использовать dir((object))
встроенную функцию, чтобы получить все связанные функции для списка и кортежа.
Пример 3.1: Список каталогов
dir(list_num)
Вывод:
('__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getite__m__ __gt__ ',' __hash__ ',' __iadd__ ',' __imul__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__ ', , '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', append ', копировать ',' подсчитывать ',' расширять ',' индекс ','insert ',' pop ',' remove ',' reverse ',' sort ')
Пример 3.2: Каталог кортежей
dir(tup_num)
Вывод:
('__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__get'new __gt__ ',' __hash__ ',' __init__ ',' __init_subclass__ ',' __iter__ ',' __le__ ',' __len__ ',' __lt__ ',' __mul__ ',' __ne__ ',' __new__ ',' __reduce__ ',' __reduce__ ',' __reduce__ ', , '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index')
Мы можем ясно видеть, что существует так много дополнительных функций, связанных со списком над кортежем. Мы можем выполнять операции вставки и извлечения, удаления и сортировки элементов в списке с помощью встроенных функций, которые недоступны в Tuple.
Сравнение размеров
Операция с кортежами имеет меньший размер, чем у списка, что делает ее немного быстрее, но не о чем упоминать, пока у вас не будет огромного количества элементов.
Пример 5.1: Расчет размера списка и кортежа
a= (1,2,3,4,5,6,7,8,9,0) b= (1,2,3,4,5,6,7,8,9,0) print('a=',a.__sizeof__()) print('b=',b.__sizeof__())
Вывод:
а = 104 б = 120
В приведенном выше коде у нас есть кортеж a и список b с одинаковыми элементами, но размер кортежа меньше, чем список.
Различные варианты использования
На первый взгляд может показаться, что списки всегда могут заменить кортежи. Но кортежи - чрезвычайно полезные структуры данных.
- Использование кортежа вместо списка может дать программисту и интерпретатору подсказку о том, что данные не следует изменять.
- Кортежи обычно используются как эквивалент словаря без ключей для хранения данных. Например,
(('Рыба-меч', 'Доминик Сена', 2001 г.), ('Сноуден', 'Оливер Стоун', 2016 г.), ('Таксист', 'Мартин Скорсезе', 1976 г.))
В приведенном выше примере содержатся кортежи внутри списка, в котором есть список фильмов. - Чтение данных упрощается, если кортежи хранятся внутри списка. Например,
((2,4), (5,7), (3,8), (5,9))
легче читать чем((2,4), (5,7), (3,8), (5,9))
Кортеж также может использоваться в качестве ключа в словаре из-за их хешируемой и неизменной природы, тогда как списки не используются в качестве ключа в словаре, потому что список не может обрабатываться __hash__()
и имеет изменчивый характер.
key_val= (('alpha','bravo'):123) #Valid key_val = (('alpha','bravo'):123) #Invalid
Ключевые моменты, о которых следует помнить:
- Буквальный синтаксис кортежей показан круглыми скобками,
()
тогда как буквальный синтаксис списков показан квадратными скобками()
. - Списки имеют переменную длину, кортежи - фиксированную длину.
- Список имеет изменяемую природу, кортеж неизменен.
- Список имеет больше функций, чем кортеж.