Чем отличаются list, tuple и set? Зачем они нужны?

Дмитрий

5-й уровень

Чем отличаются list, tuple и set? Зачем они нужны?

List (список), tuple (кортеж), set (множество) - это встроенные структуры данных языка python. Каждая из них имеет свои возможности и ограничения. Это позволяет выбрать наиболее подходящий способ хранения информации в программе.

List (список)

Базовая структура данных в python. Элементы в списке хранятся последовательно, каждому из них присвоены индексы, начиная с нуля. В отличие от массива, список может хранить объекты любого типа.

Создание списка

>>> my_list = [] # Создание пустого списка с помощью литерала списка
>>> my_list = list() # Создание пустого списка с помощью встроенной функции
>>>
>>> my_list = [1,2,['a','b'],4,5] # Инициализация списка
>>>
>>> my_list = list('hello world') # Создание списка из итерируемого объекта
>>> my_list
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>>
>>> my_list = [x for x in range(10)] # Генератор списков в действии
>>> my_list
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Доступные методы

  • my_list.append(x) - добавляет x в конец списка
  • my_list.clear() - очищает список
  • my_list.copy() - возвращает копию списка my_list
  • my_list.count(x) - возвращает кол-во элементов со значением x
  • my_list.extend(x) - добавляет элементы списка x к концу списка my_list
  • my_list.index(x,start,end) - возвращает индекс первого найденного x, можно задать промежуток для поиска (опционально)
  • my_list.insert(index, x) - вставляет x на заданную позицию
  • my_list.pop(index) - возвращает элемент с указанным индексом и удаляет его, если индекс не указан - возвращается и удаляется последний элемент
  • my_list.remove(x) - удаляет первый элемент со значением x
  • my_list.reverse() - инвертирует порядок элементов в списке
  • my_list.sort(key=x) сортирует список на основе функции x

В каких случаях использовать?

Для хранения элементов, объединенных каким либо признаком. В случае, если изменение элементов и/или расширение списка не предполагается, следует использовать неизменяемый аналог - кортеж.

Tuple (кортёж)

Кортеж - это неизменяемый и более быстрый аналог списка. Он защищает хранимые данные от непреднамеренных изменений и может использоваться в качестве ключа в словарях (словарь - ассоциативный массив в python).

Создание кортежа.

>>> my_tuple = () # Создание кортежа с помощью литерала
>>> my_tuple = tuple() # Создание кортежа с помощью встроенной функции
>>>
>>> my_tuple = (1,2,['a','b'],4,5) # Инициализация кортежа
>>>
>>> my_tuple = tuple('hello world') # Создание кортежа из итерируемого объекта
>>> my_tuple
('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd')
>>>
>>> my_tuple = tuple(2**x for x in [0, 1, 2, 3]) # Генератор кортежей
>>> my_tuple
(1, 2, 4, 8)

Доступные методы

  • my_tuple.count(x) - возвращает кол-во элементов со значением x
  • my_tuple.index(x,start,end) - возвращает индекс первого найденного x, можно задать промежуток для поиска (опционально)

В каких случаях использовать?

Для хранения данных вместо списка (если они не предполагают изменений).

Set (множество)

Множество - это набор уникальных элементов в случайном порядке (неупорядоченный список). Множества примечательны тем, что операция проверки "принадлежит ли объект множеству" происходит значительно быстрее аналогичных операций в других структурах данных.

Создание множества

>>> my_something = {} # !!! Попытка создать множество при помощи литерала даст нам словарь
>>> type(my_something)
<class 'dict'> 
>>>
>>> my_set = set() # Создание при помощи встроенной функции
>>>
>>> my_set = {1,2,3,4,5} # Инициализация множества
>>>
>>> my_set = set('hello world') # Создания множества из итерируемого объекта
>>> my_set
{'r', 'o', 'e', 'h', 'd', 'w', 'l', ' '}
>>>
>>> my_set = {x for x in range(10)} # Генератор множеств
>>> my_set
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

Доступные методы

  • my_set.add(x) - добавляет x во множество
  • my_set.difference(x) - возвращает множество элементов my_set, которые не входят во множество x
  • my_set.difference_update(x) - удаляет из множества my_set все элементы, которые входят во множество x
  • my_set.discard(x) - удаляет элемент x из my_set
  • my_set.intersection(x) - возвращает элементы общие для множеств my_set и x
  • my_set.intersection_update(x) - удаляет из множества my_set элементы, которых нет во множестве x
  • my_set.isdisjoint(x) - возвращает true если my_set и x не содержат одинаковых значений
  • my_set.issubset(x) - возвращает true если все элементы my_set входят во множество x
  • my_set.issuperset(x) - возвращает true если все элементы x входят во множество my_set
  • my_set.pop() - возвращает и удаляет первый (на данный момент) элемент множества
  • my_set.remove(x) - удаляет x из множества
  • my_set.symmetric_difference(x) - возвращает все элементы из x и my_set, которые встречаются только в одном из множеств
  • my_set.symmetric_difference_update(x) - обновляет исходное множество таким образом, что оно будет состоять из всех элементов x и my_set, которые встречаются только в одном из множеств
  • my_set.union(x) - возвращает новое множество, состоящее из всех элементов x и my_set
  • my_set.update(x) - добавляет в my_set все элементы x

В каких случаях использовать?

Когда необходимо проверять принадлежит ли значение набору уникальных элементов и отсутствует необходимость поддерживать порядок в данном наборе.