Чем отличаются list, tuple и set? Зачем они нужны?
Дмитрий
Чем отличаются 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
В каких случаях использовать?
Когда необходимо проверять принадлежит ли значение набору уникальных элементов и отсутствует необходимость поддерживать порядок в данном наборе.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.