Rozumiem, że oba są zasadniczo tym samym, ale jeśli chodzi o styl, który z nich jest lepszy (bardziej Pythonic) do utworzenia pustej listy lub dyktu?
python
performance
list
dictionary
Noah McIlraith
źródło
źródło
list(i for i in range(10) if i % 2)
timeit()
funkcja raportuje całkowity czas wykonania określonej liczby iteracji, co jest1000000
wartością domyślną. Zatem powyższe przykłady to liczba sekund potrzebna do uruchomienia fragmentu kodu milion razy. Na przykładtimeit('dict()', number=1) // -> 4.0531158447265625e-06
(jedna iteracja) podczastimeit('dict()') // -> 0.12412905693054199
(milion iteracji)Moim zdaniem
[]
i{}
są najbardziej pytonicznymi i czytelnymi sposobami tworzenia pustych list / dykt.Uważaj
set()
jednak, na przykład:Może być mylące. Pierwsza tworzy zestaw z jednym elementem, druga tworzy pusty dykt, a nie zestaw.
źródło
{}
zawsze tworzy pusty dykt.{1,2,3}
tworzy zestaw w wersji 2.7+, ale jest błędem składniowym w2.6
i starszych wersjach.some_epic_set
wskazującej na pustydict
obiekt ... to nie jest pusty zbiór. Aby uzyskać pusty zestaw, musisz użyćset()
.{5}
tworzy zestaw z jednym elementem5
i{}
jest pustym nakazem.{*()}
do zrobienia pustegoset
z literałem składni. Nazywam to jednooką małpą operatorem. :-)Dict dosłowna może być drobny trochę szybciej, jej kod bajtowy jest krótszy:
To samo dotyczy
list
vs[]
źródło
CALL_FUNCTION
zajmuje co najmniej tyle samo czasu, ileBUILD_MAP
(wywoływana funkcja zasadniczo jestBUILD_MAP
), aLOAD_GLOBAL
trwa to tylko dodatkowe obciążenie.IMHO, używanie
list()
idict()
sprawia, że twój Python wygląda jak C. Ugh.źródło
W przypadku różnicy między [] i list () istnieje pułapka, na którą nie widziałem nikogo innego. Jeśli użyjesz słownika jako członka listy, oba dadzą zupełnie inne wyniki:
źródło
[foo_dict]
przy użyciulist((foo_dict,))
.list()
Metoda bierze iterable jak to tylko parametr i iteracje nad nim, aby dodać elementy do listy. Spowoduje to podobną pułapkę, jeślilist(some_list)
spowoduje to spłaszczenie listy.list () i [] działają inaczej:
list () zawsze tworzy nowy obiekt w stercie, ale [] może ponownie użyć komórki pamięci z wielu powodów.
źródło
istnieje jedna różnica w zachowaniu między [] i list (), jak pokazuje poniższy przykład. musimy użyć list (), jeśli chcemy zwrócić listę liczb, w przeciwnym razie otrzymamy obiekt mapy! Nie wiem jednak, jak to wyjaśnić.
źródło
Para nawiasów prostokątnych oznacza jeden z obiektów listy lub indeks indeksu, my_List [x].
Para nawiasów klamrowych oznacza obiekt słownika.
a_list = ['on', 'off', 1, 2]
a_dict = {on: 1, off: 2}
źródło
W większości przypadków jest to kwestia wyboru. To kwestia preferencji.
Pamiętaj jednak, że jeśli masz na przykład klawisze numeryczne, nie możesz tego zrobić:
Musisz zrobić:
źródło
mydict = {1:"foo", 2:"bar"}
(bez cudzysłowów dla kluczy).