Кортежи и словари
Зачем нужны кортежи и словари, если есть список ? Может у них есть какие-то свои особенности ? Можете сказать, пожалуйста?
Ответы (3 шт):
Первое, сравнивать словарь со списком или кортежем не верно. У него свой функционал и применение.
Второе, кортеж - неизменяемый тип данных, а список - изменяемый. В остальном они похожи. Оба итерируемые (то есть можно пробежаться по всем членам сущности) и упорядоченные (каждый элемент имеет свое место и индекс, порядковый номер этого места)
list_ = [1,2,3]
list_.remove(1)
print(list_)
# OUT
# [2, 3]
с кортежем такое провернуть нельзя, как и любые другие изменения.
Например сортировать
list_ = [3,1,2]
list_.sort()
print(list_)
# OUT
# [1, 2, 3]
Про словарь:
Словарь служит для хранения пар значений, где по первому значению в паре (ключу) можно получить второе значение.
Почему не использовать просто список с парами значений, и искать нужные значения просто циклом?
Потому что длительность поиска нужного объекта в списке будет пропорциональна длине списка (в среднем нужно дойти до середины списка, пока найдешь нужный объект), скорость поиска ключа в словаре (или объекта в множестве) практически не зависит от размера словаря или множества (время примерно константно).
Это свойство достигается тем, что словари и множества реализуется как хеш-таблицы, про которые можно почитать в википедии, еще лучше - почитать какую-нибудь книгу по алгоритмам и структурам данных.
По поводу кортежей:
- Они неизменяемы (иммутабельны)
- и хешируемы (если содержат только хешируемые элементы) - значит могут быть ключами в словаре или элементами множеств (в отличие от списков).
- и еще небольшой бонус - они занимают немного меньше места в памяти
По теме рекомендую почитать статью на Хабре:
В каких случаях не нужно использовать списки в Python
Списки в Python - упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться). пример list('список') ['с', 'п', 'и', 'с', 'о', 'к']
Кортеж, по сути - неизменяемый список. Зачем нужны кортежи, если есть списки? Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо). Меньший размер. Возможность использовать кортежи в качестве ключей словаря. пример d = {(1, 1, 1) : 1}
Словари в Python - неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами. пример d = {'dict': 1, 'dictionary': 2}