Список Python против кортежей (с примерами)

В этой статье мы узнаем о ключевых различиях между списком и кортежами и о том, как использовать эти две структуры данных.

Списки и кортежи хранят один или несколько объектов или значений в определенном порядке. Объекты, хранящиеся в списке или кортеже, могут быть любого типа, включая тип ничего, определенный ключевым словом 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' не поддерживает назначение элементов

В приведенном выше коде мы присвоили 5list_num индекс 2и нашли 5индекс 2в выводе. Также мы присвоили 5tup_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 с одинаковыми элементами, но размер кортежа меньше, чем список.

Различные варианты использования

На первый взгляд может показаться, что списки всегда могут заменить кортежи. Но кортежи - чрезвычайно полезные структуры данных.

  1. Использование кортежа вместо списка может дать программисту и интерпретатору подсказку о том, что данные не следует изменять.
  2. Кортежи обычно используются как эквивалент словаря без ключей для хранения данных. Например,
     (('Рыба-меч', 'Доминик Сена', 2001 г.), ('Сноуден', 'Оливер Стоун', 2016 г.), ('Таксист', 'Мартин Скорсезе', 1976 г.))
    В приведенном выше примере содержатся кортежи внутри списка, в котором есть список фильмов.
  3. Чтение данных упрощается, если кортежи хранятся внутри списка. Например,
     ((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 

Ключевые моменты, о которых следует помнить:

  1. Буквальный синтаксис кортежей показан круглыми скобками, ()тогда как буквальный синтаксис списков показан квадратными скобками ().
  2. Списки имеют переменную длину, кортежи - фиксированную длину.
  3. Список имеет изменяемую природу, кортеж неизменен.
  4. Список имеет больше функций, чем кортеж.

Интересные статьи...