Відповіді:
listСтежить за порядком, dictі setнемає: якщо ви дбаєте про замовлення, тому ви повинні використовувати list(якщо ваш вибір контейнерів обмежуються ці три, звичайно ;-).
dictпов'язує з кожним ключем значення, в той час як listі setпросто містить значення: очевидно, дуже різні випадки використання.
setвимагає, щоб елементи були хешируемими, listне так: якщо у вас є елементи, які не є хешируемыми, отже, ви не можете їх використовувати, setа натомість потрібно використовувати list.
setзабороняє дублікати, listне: також вирішальне розмежування. ("Мультисет", який відображає дублікати в різні підрахунки для предметів, присутніх не один раз, можна знайти в collections.Counter- ви можете створити його як dict, якщо з якихось дивних причин ви не змогли імпортувати collections, або в попередньому 2.7 Python як a collections.defaultdict(int), використовуючи елементи як ключі та пов'язане значення як кількість).
Перевірка належності значення в set(або dict, для ключів) надзвичайно швидка (займає постійний короткий час), тоді як у списку потрібен час, пропорційний довжині списку в середньому та найгіршому випадках. Тож, якщо у вас є хешируеми предмети, то не хвилюйтеся ні на замовлення, ні на дублікати, а хочете швидкої перевірки членства, setкраще ніж list.
Коли ви хочете, щоб не упорядкована колекція унікальних елементів, використовуйте set. (Наприклад, коли потрібно набір усіх слів, що використовуються в документі).
Коли ви хочете зібрати незмінний впорядкований список елементів, використовуйте a tuple. (Наприклад, коли ви хочете, щоб пара (ім'я, телефонний номер), яку ви хочете використовувати як елемент у наборі, вам знадобиться кортеж, а не список, оскільки набори вимагають, щоб елементи були незмінними).
Коли ви хочете зібрати змінений упорядкований список елементів, використовуйте a list. (Наприклад, коли ви бажаєте додати до списку нові телефонні номери: [номер1, номер2, ...]).
Коли ви хочете відобразити зі значень ключів до значень, використовуйте a dict. (Наприклад, коли потрібно телефонну книгу, яка відображає імена до телефонних номерів:) {'John Smith' : '555-1212'}. Зверніть увагу, що ключі в диктаті не упорядковані. (Якщо ви повторюєте діктант (телефонна книга), клавіші (імена) можуть відображатися в будь-якому порядку).
Коротше кажучи, використовуйте:
list - якщо вам потрібна впорядкована послідовність елементів.
dict - якщо вам потрібно співвідносити значення з ключами
set - якщо вам потрібно зберегти унікальні елементи.
Список - це змінна послідовність, яка зазвичай використовується для зберігання колекцій однорідних предметів.
Список реалізує всі загальні операції послідовності:
x in l і x not in ll[i], l[i:j],l[i:j:k]len(l), min(l),max(l)l.count(x)l.index(x[, i[, j]])- індекс 1-го виникнення xв l(за і після iта перед jіндексами)У списку також реалізовані всі операції послідовних змін:
l[i] = x- пункт i" lзамінюється"xl[i:j] = t- фрагмент lвід iдо jзамінюється вмістом ітерабельногоtdel l[i:j] - такий же, як l[i:j] = []l[i:j:k] = t- елементи елементів l[i:j:k]замінюються елементамиtdel l[i:j:k]- видаляє елементи s[i:j:k]зі спискуl.append(x)- додається xдо кінця послідовностіl.clear()- видаляє всі елементи з l(так само, як і del l[:])l.copy()- створює дрібну копію l(те саме, що l[:])l.extend(t)або l += t- поширюється lна вмістtl *= n- оновлення lзі своїм змістом повторних nразівl.insert(i, x)- вставляє xв lіндекс, заданийil.pop([i])- отримує елемент у, iа також видаляє його зll.remove(x)- видаліть перший елемент з lмісця l[i], рівного xl.reverse()- перевертає елементи lна місціСписок може бути використаний як стек, скориставшись методами appendта pop.
Словник відображає перебірливі значення довільних об'єктів. Словник - це об'єкт, що змінюється. Основні операції зі словником - це збереження значення за допомогою якогось ключа та вилучення значення, заданого ключем.
У словнику ви не можете використовувати в якості значень клавіш, які не є доступними, тобто значеннями, що містять списки, словники чи інші типи змінних.
Набір - це не упорядкована колекція різних предметів, що змішуються. Набір зазвичай використовується для тестування членства, видалення дублікатів із послідовності та обчислення математичних операцій, таких як перетину, об'єднання, різниці та симетричної різниці.
Хоча це не стосується sets, це добре пояснення dicts і lists:
Списки - це те, що їм здається, - список цінностей. Кожен з них нумерується, починаючи з нуля - перший нумерується нулем, другий 1, третій 2 і т. Д. Можна вилучити значення зі списку та додати нові значення до кінця. Приклад: Імена ваших багатьох котів
Словники схожі на те, що підказує їх назва - словник. У словнику у вас є "індекс" слів, і для кожного з них - визначення. У python слово називається «ключ», а визначення - «значення». Значення в словнику не нумеруються - тара схожа на те, що пропонує їх назва - словник. У словнику у вас є "індекс" слів, і для кожного з них - визначення. Значення в словнику не нумеруються - вони також не в певному порядку - ключ робить те саме. Ви можете додавати, видаляти та змінювати значення у словниках. Приклад: телефонна книга.
Для C ++ я завжди мав на увазі цю схему потоків: У якому сценарії я використовую конкретний контейнер STL? , тому мені було цікаво, чи є щось подібне і для Python3, але мені не пощастило.
Що потрібно пам’ятати для Python: це не існує єдиного стандарту Python, як для C ++. Отже, можуть бути величезні відмінності для різних інтерпретаторів Python (наприклад, CPython, PyPy). Наведена нижче схема потоку для CPython.
Крім того , я не знайшов хороший спосіб включити такі структури даних в діаграму: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, і arrays.
OrderedDictі dequeдоступні через collectionsмодуль.heapqдоступний у heapqмодуліLifoQueue, Queueі PriorityQueueдоступні через queueмодуль, призначений для одночасного доступу (потоків). (Існує також multiprocessing.Queueдоступний, але я не знаю відмінностей, queue.Queueале я вважаю, що його слід використовувати, коли потрібен паралельний доступ з процесів.)dict, set, frozen_set, І listце вбудовані звичайноДля будь-кого я буду вдячний, якщо ви могли б покращити цю відповідь та надати кращу діаграму в кожному аспекті. Відчуйте себе вільно та ласкаво просимо.

PS: діаграма зроблена з yed. Файл graphml знаходиться тут
У поєднанні зі списками , диктами та наборами також є ще один цікавий об’єкт пітона - OrdersDicts .
Впорядковані словники подібно до звичайних словників, але вони пам'ятають порядок введення елементів. Під час ітерації над упорядкованим словником елементи повертаються в тому порядку, в який були додані їхні ключі.
OrdersDicts може бути корисним, коли вам потрібно зберегти порядок клавіш, наприклад, робота з документами: звичайно потрібно векторне представлення всіх термінів у документі. Таким чином, використовуючи OrdersDicts, ви зможете ефективно перевірити, чи був термін прочитаний раніше, додавати терміни, витягувати терміни та після всіх маніпуляцій ви можете витягнути впорядковане векторне зображення їх.
Списки - це те, що їм здається, - список цінностей. Кожен з них нумерується, починаючи з нуля - перший нумерується нулем, другий 1, третій 2 і т. Д. Можна вилучити значення зі списку та додати нові значення до кінця. Приклад: Імена ваших багатьох котів
Кортежі подібно до списків, але ви не можете змінити їх значення. Значення, які ви даєте йому спочатку, - це значення, які ви застрягли для решти програми. Знову кожне значення нумерується, починаючи з нуля, для зручного ознайомлення. Приклад: назви місяців року.
Словники схожі на те, що підказує їх назва - словник. У словнику у вас є "індекс" слів, і для кожного з них - визначення. У python слово називається «ключ», а визначення - «значення». Значення в словнику не нумеруються - тара схожа на те, що пропонує їх назва - словник. У словнику у вас є "індекс" слів, і для кожного з них - визначення. У python слово називається «ключ», а визначення - «значення». Значення в словнику не нумеруються - вони також не в певному порядку - ключ робить те саме. Ви можете додавати, видаляти та змінювати значення у словниках. Приклад: телефонна книга.
Використовуючи їх, я роблю вичерпну схему їх методів для довідки:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
Словник: Словник python використовується як хеш-таблиця з ключем як індексом та об'єктом як значенням.
Список: Список використовується для утримання об'єктів у масиві, індексованому позицією цього об’єкта в масиві.
Набір: Набір - це колекція з функціями, які можуть визначити, чи є об’єкт у наборі чи ні.