lst = lambda:list(range(0,5))
d = defaultdict(lst)
Jest to również dobry pomysł tutaj, ponieważ w przeciwnym razie wszystkie wartości domyślne by odniesienia tej samej listy. Na przykład tutaj:
d[1].append(14)
będzie nie mieć wpływ na d[2]
(biorąc pod uwagę zarówno d[1]
i d[2]
nie istnieje).
Ty można jednak osiągnąć ten z:
val = list(range(0,5))
lst = lambda:val
d = defaultdict(lst)
Ale może to mieć niepożądane skutki uboczne: jeśli tu wykonać d[1].append(14)
następnie d[2]
będzie [1,2,3,4,5,12]
i d[1] is d[2]
będzie True
:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import defaultdict
>>> val = list(range(0,5))
>>> lst = lambda:val
>>> d = defaultdict(lst)
>>> d[1]
[0, 1, 2, 3, 4]
>>> d[1].append(14)
>>> d[2]
[0, 1, 2, 3, 4, 14]
>>> d[1] is d[2]
True
natomiast:
$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from collections import defaultdict
>>> lst = lambda:list(range(0,5))
>>> d = defaultdict(lst)
>>> d[1]
[0, 1, 2, 3, 4]
>>> d[1].append(14)
>>> d[2]
[0, 1, 2, 3, 4]
>>> d[1] is d[2]
False
ładnie wyjaśnione. –
@ Jean-FrançoisFabre: dziękuję :) –
Więc nie mogę użyć defaultdict na istniejącej liście, powiedz 'a = [5,2,3]'? – Arcyno