Kiedy powinienem używać słownika, listy lub zestawu?
Czy istnieją scenariusze, które są bardziej odpowiednie dla każdego typu danych?
źródło
Kiedy powinienem używać słownika, listy lub zestawu?
Czy istnieją scenariusze, które są bardziej odpowiednie dla każdego typu danych?
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
.
źródło
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).źródło
Skorzystaj ze słownika, jeśli masz zestaw unikalnych kluczy odwzorowanych na wartości.
Użyj listy, jeśli masz uporządkowaną kolekcję przedmiotów.
Użyj zestawu do przechowywania nieuporządkowanego zestawu przedmiotów.
źródło
W skrócie użyj:
list
- jeśli potrzebujesz uporządkowanej sekwencji przedmiotów.dict
- jeśli chcesz powiązać wartości z kluczamiset
- jeśli potrzebujesz zachować unikalne elementy.Szczegółowe wyjaśnienie
Lista
Lista jest zmienną sekwencją, zwykle używaną do przechowywania kolekcji jednorodnych przedmiotów.
Lista implementuje wszystkie typowe operacje na sekwencjach:
x in l
ix 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ąpieniax
wl
(w lub poi
i przedj
indeksem)Lista implementuje również wszystkie operacje sekwencji podlegającej mutacji:
l[i] = x
- artykułi
zl
zastąpionox
l[i:j] = t
- plasterekl
odi
doj
zastępuje się treścią iterowalnąt
del l[i:j]
- taki sam jakl[i:j] = []
l[i:j:k] = t
- elementyl[i:j:k]
są zastąpione tymi zt
del l[i:j:k]
- usuwa elementys[i:j:k]
z listyl.append(x)
- dołączax
na końcu sekwencjil.clear()
- usuwa wszystkie elementy zl
(tak samo jak dell[:]
)l.copy()
- tworzy płytką kopięl
(taką samą jakl[:]
)l.extend(t)
lubl += t
- rozszerza sięl
wraz z zawartościąt
l *= n
- aktualizacjel
z zawartością powtarzanen
razyl.insert(i, x)
- wkładkix
językl
w wskaźnika danej przezi
l.pop([i])
- pobiera element z,i
a także usuwa go zl
l.remove(x)
- usuń pierwszy element, zl
któregol[i]
jest równy xl.reverse()
- odwraca pozycjel
na miejscuListę można wykorzystać jako stos, korzystając z metod
append
ipop
.Słownik
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
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.
źródło
Chociaż nie obejmuje to
set
s, jest to dobre wyjaśnieniedict
s ilist
s:http://www.sthurlow.com/python/lesson06/
źródło
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
, iarrays
.OrderedDict
ideque
są dostępne za pośrednictwemcollections
modułu.heapq
jest dostępny zheapq
modułuLifoQueue
,Queue
iPriorityQueue
są dostępne za pośrednictwemqueue
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
, Ilist
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
źródło
W połączeniu z listami , dictami i zestawami istnieje również inny interesujący obiekt pytona, OrdersDicts .
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ą.
źródło
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.
źródło
Kiedy ich używam, tworzę obszerną ściągę ich metod w celach informacyjnych:
źródło
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.
źródło