Odpowiedzi:
A list
utrzymuje porządek, dict
a set
nie: 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 ;-).
dict
kojarzy się z każdej kluczowej wartości, podczas list
i set
po prostu zawierać wartości: bardzo różne przypadki użycia, oczywiście.
set
wymaga, aby przedmioty były haszowalne, list
nie: jeśli masz przedmioty, których nie można haszować, dlatego nie możesz ich używać set
i musisz zamiast tego używać list
.
set
zabrania duplikowania, list
nie: 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ć collections
lub 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 dict
kluczy) 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, set
jest 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 l
l[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 x
w l
(w lub po i
i przed j
indeksem)Lista implementuje również wszystkie operacje sekwencji podlegającej mutacji:
l[i] = x
- artykuł i
z l
zastąpionox
l[i:j] = t
- plasterek l
od i
do j
zastępuje się treścią iterowalnąt
del l[i:j]
- taki sam jak l[i:j] = []
l[i:j:k] = t
- elementy l[i:j:k]
są zastąpione tymi zt
del l[i:j:k]
- usuwa elementy s[i:j:k]
z listyl.append(x)
- dołącza x
na 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ę l
wraz z zawartościąt
l *= n
- aktualizacje l
z zawartością powtarzane n
razyl.insert(i, x)
- wkładki x
język l
w wskaźnika danej przezi
l.pop([i])
- pobiera element z, i
a także usuwa go zl
l.remove(x)
- usuń pierwszy element, z l
którego l[i]
jest równy xl.reverse()
- odwraca pozycje l
na miejscuListę można wykorzystać jako stos, korzystając z metod append
i 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 set
s, jest to dobre wyjaśnienie dict
s i list
s:
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
.
OrderedDict
i deque
są dostępne za pośrednictwem collections
modułu.heapq
jest dostępny z heapq
modułuLifoQueue
, Queue
i PriorityQueue
są dostępne za pośrednictwem queue
modułu, który jest przeznaczony do równoczesnego dostępu (wątków). (Jest też multiprocessing.Queue
dostępny, ale nie znam różnic, queue.Queue
ale zakładam, że należy go użyć, gdy potrzebny jest równoczesny dostęp z procesów).dict
, set
, frozen_set
, I list
są 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.