Odpowiedzi:
A listutrzymuje porządek, dicta setnie: kiedy zależy ci na porządku, musisz go użyć list(jeśli twój wybór pojemników jest ograniczony do tych trzech, oczywiście ;-).
dictkojarzy się z każdej kluczowej wartości, podczas listi setpo prostu zawierać wartości: bardzo różne przypadki użycia, oczywiście.
setwymaga, aby przedmioty były haszowalne, listnie: jeśli masz przedmioty, których nie można haszować, dlatego nie możesz ich używać seti musisz zamiast tego używać list.
setzabrania duplikowania, listnie: także istotnego rozróżnienia. (Można znaleźć „multiset”, który odwzorowuje duplikaty na inną liczbę dla przedmiotów obecnych więcej niż jeden raz collections.Counter- możesz go zbudować jako dict, jeśli z jakiegoś dziwnego powodu nie możesz zaimportować collectionslub w wersji wcześniejszej niż 2.7 Python jako a collections.defaultdict(int), używając elementów jako kluczy i powiązanej wartości jako liczby).
Sprawdzanie przynależności wartości do set(lub dictkluczy) jest niezwykle szybkie (zajmuje około stałego, krótkiego czasu), podczas gdy na liście zajmuje czas proporcjonalny do długości listy w przeciętnych i najgorszych przypadkach. Tak więc, jeśli masz przedmioty z haszowaniem, nie przejmuj się ani zamówieniem, ani duplikatami, a chcesz szybkiego sprawdzania członkostwa, setjest lepsze niż list.
Jeśli chcesz mieć nieuporządkowaną kolekcję unikalnych elementów, użyj set. (Na przykład, jeśli chcesz mieć zestaw wszystkich słów użytych w dokumencie).
Jeśli chcesz zebrać niezmienną uporządkowaną listę elementów, użyj tuple. (Na przykład, jeśli chcesz mieć parę (nazwa, numer_ telefonu), której chcesz użyć jako elementu w zestawie, potrzebujesz krotki zamiast listy, ponieważ zestawy wymagają elementów niezmiennych).
Jeśli chcesz zebrać zmienną uporządkowaną listę elementów, użyj list. (Na przykład, jeśli chcesz dołączyć nowe numery telefonów do listy: [liczba1, liczba2, ...]).
Jeśli chcesz mapować klucze na wartości, użyj dict. (Na przykład, jeśli chcesz książkę telefoniczną, która mapuje nazwy na numery telefonów:) {'John Smith' : '555-1212'}. Uwaga: klucze w nagraniu są nieuporządkowane. (W przypadku iteracji po słowie (książce telefonicznej) klawisze (nazwiska) mogą pojawiać się w dowolnej kolejności).
W skrócie użyj:
list - jeśli potrzebujesz uporządkowanej sekwencji przedmiotów.
dict - jeśli chcesz powiązać wartości z kluczami
set - jeśli potrzebujesz zachować unikalne elementy.
Lista jest zmienną sekwencją, zwykle używaną do przechowywania kolekcji jednorodnych przedmiotów.
Lista implementuje wszystkie typowe operacje na sekwencjach:
x in l i 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]])- indeks pierwszego wystąpienia xw l(w lub po ii przed jindeksem)Lista implementuje również wszystkie operacje sekwencji podlegającej mutacji:
l[i] = x- artykuł iz lzastąpionoxl[i:j] = t- plasterek lod ido jzastępuje się treścią iterowalnątdel l[i:j] - taki sam jak l[i:j] = []l[i:j:k] = t- elementy l[i:j:k]są zastąpione tymi ztdel l[i:j:k]- usuwa elementy s[i:j:k]z listyl.append(x)- dołącza xna końcu sekwencjil.clear()- usuwa wszystkie elementy z l(tak samo jak del l[:])l.copy()- tworzy płytką kopię l(taką samą jak l[:])l.extend(t)lub l += t- rozszerza się lwraz z zawartościątl *= n- aktualizacje lz zawartością powtarzane nrazyl.insert(i, x)- wkładki xjęzyk lw wskaźnika danej przezil.pop([i])- pobiera element z, ia także usuwa go zll.remove(x)- usuń pierwszy element, z lktórego l[i]jest równy xl.reverse()- odwraca pozycje lna miejscuListę można wykorzystać jako stos, korzystając z metod appendi pop.
Słownik mapuje wartości skrótu na dowolne obiekty. Słownik jest obiektem zmiennym. Głównymi operacjami na słowniku jest przechowywanie wartości z pewnym kluczem i wyodrębnianie wartości z danego klucza.
W słowniku nie można używać jako kluczy wartości, które nie są haszowalne, to znaczy wartości zawierające listy, słowniki lub inne typy zmienne.
Zestaw to nieuporządkowana kolekcja różnych obiektów możliwych do skrótu. Zestaw jest powszechnie używany do testowania członkostwa, usuwania duplikatów z sekwencji i obliczania operacji matematycznych, takich jak przecięcie, połączenie, różnica i różnica symetryczna.
Chociaż nie obejmuje to sets, jest to dobre wyjaśnienie dicts i lists:
Listy są tym, czym się wydają - listą wartości. Każdy z nich jest ponumerowany, zaczynając od zera - pierwszy ma numer zero, drugi 1, trzeci 2 itd. Możesz usunąć wartości z listy i dodać nowe wartości na końcu. Przykład: imiona Twoich wielu kotów.
Słowniki są podobne do tego, co sugeruje ich nazwa - słownik. W słowniku masz „indeks” słów, a dla każdego z nich definicję. W Pythonie słowo to nazywa się „kluczem”, a definicja „wartością”. Wartości w słowniku nie są ponumerowane - tara podobna do tego, co sugeruje ich nazwa - słownik. W słowniku masz „indeks” słów, a dla każdego z nich definicję. Wartości w słowniku nie są numerowane - nie są też w żadnej określonej kolejności - klucz robi to samo. Możesz dodawać, usuwać i modyfikować wartości w słownikach. Przykład: książka telefoniczna.
W przypadku C ++ zawsze miałem na uwadze ten schemat blokowy: w jakim scenariuszu używam określonego kontenera STL? , więc byłem ciekawy, czy coś podobnego jest dostępne również dla Python3, ale nie miałem szczęścia.
W Pythonie należy pamiętać o tym, że: Nie ma jednego standardu Python jak dla C ++. Stąd mogą istnieć ogromne różnice dla różnych interpretatorów Pythona (np. CPython, PyPy). Poniższy schemat blokowy dotyczy CPython.
Dodatkowo stwierdzono, że nie ma dobrego sposobu, aby naniesienie następujące struktury danych na wykresie: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, i arrays.
OrderedDicti dequesą dostępne za pośrednictwem collectionsmodułu.heapqjest dostępny z heapqmodułuLifoQueue, Queuei PriorityQueuesą dostępne za pośrednictwem queuemodułu, który jest przeznaczony do równoczesnego dostępu (wątków). (Jest też multiprocessing.Queuedostępny, ale nie znam różnic, queue.Queueale zakładam, że należy go użyć, gdy potrzebny jest równoczesny dostęp z procesów).dict, set, frozen_set, I listsą oczywiście wbudowaneByłbym wdzięczny za poprawienie tej odpowiedzi i przedstawienie lepszego schematu pod każdym względem. Zapraszam i zapraszam.

PS: schemat został wykonany za pomocą yed. Plik graphml jest tutaj
W połączeniu z listami , dictami i zestawami istnieje również inny interesujący obiekt pytona, OrdersDicts .
Uporządkowane słowniki są jak zwykłe słowniki, ale pamiętają kolejność wstawiania elementów. Podczas iteracji nad uporządkowanym słownikiem elementy są zwracane w kolejności, w której klucze zostały po raz pierwszy dodane.
Uporządkowane dyktaty mogą być przydatne, gdy trzeba zachować kolejność kluczy, na przykład podczas pracy z dokumentami: Często potrzebna jest reprezentacja wektorowa wszystkich terminów w dokumencie. Tak więc za pomocą OrdersDicts możesz skutecznie sprawdzić, czy termin został przeczytany wcześniej, dodać terminy, wyodrębnić warunki, a po wszystkich manipulacjach możesz wyodrębnić ich uporządkowaną reprezentację wektorową.
Listy są tym, czym się wydają - listą wartości. Każdy z nich jest ponumerowany, zaczynając od zera - pierwszy ma numer zero, drugi 1, trzeci 2 itd. Możesz usunąć wartości z listy i dodać nowe wartości na końcu. Przykład: imiona Twoich wielu kotów.
Krotki są jak listy, ale nie można zmienić ich wartości. Wartości, które podajesz jako pierwsze, to wartości, których utknąłeś w pozostałej części programu. Ponownie, każda wartość jest ponumerowana począwszy od zera, dla łatwego odniesienia. Przykład: nazwy miesięcy roku.
Słowniki są podobne do tego, co sugeruje ich nazwa - słownik. W słowniku masz „indeks” słów, a dla każdego z nich definicję. W Pythonie słowo to nazywa się „kluczem”, a definicja „wartością”. Wartości w słowniku nie są ponumerowane - tara podobna do tego, co sugeruje ich nazwa - słownik. W słowniku masz „indeks” słów, a dla każdego z nich definicję. W Pythonie słowo to nazywa się „kluczem”, a definicja „wartością”. Wartości w słowniku nie są numerowane - nie są też w żadnej określonej kolejności - klucz robi to samo. Możesz dodawać, usuwać i modyfikować wartości w słownikach. Przykład: książka telefoniczna.
Kiedy ich używam, tworzę obszerną ściągę ich metod w celach informacyjnych:
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'}}
Słownik: słownik Pythona jest używany jak tablica skrótów z kluczem jako indeksem i obiektem jako wartością.
Lista: lista służy do przechowywania obiektów w tablicy indeksowanej według pozycji tego obiektu w tablicy.
Zestaw: zestaw to kolekcja z funkcjami, które pozwalają stwierdzić, czy obiekt jest obecny, czy nie.