Tworzenie pustej listy w Pythonie
Jaki jest najlepszy sposób na utworzenie nowej pustej listy w Pythonie?
l = []
Lub
l = list()
Pytam z dwóch powodów:]}
-
Z przyczyn technicznych, co jest szybsze. (Tworzenie klasy powoduje napowietrzność?)
- czytelność kodu - która z nich jest standardową konwencją.
4 answers
Oto jak możesz sprawdzić, który fragment kodu jest szybszy:
% python -mtimeit "l=[]"
10000000 loops, best of 3: 0.0711 usec per loop
% python -mtimeit "l=list()"
1000000 loops, best of 3: 0.297 usec per loop
Jednak w praktyce ta inicjalizacja jest najprawdopodobniej bardzo małą częścią twojego programu, więc martwienie się o to jest prawdopodobnie błędne.
Czytelność jest bardzo subiektywna. Wolę[]
, ale niektórzy bardzo kompetentni ludzie, jak Alex Martelli, wolą list()
, ponieważ jest zaimkiem .Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:01
list()
jest z natury wolniejszy niż []
, Ponieważ
Istnieje wyszukiwanie symboli (nie ma mowy, aby python wiedział z góry, jeśli nie tylko redefiniujesz listę, aby była czymś innym!),
-
Istnieje wywołanie funkcji,
-
Następnie musi sprawdzić, czy został przekazany argument iterowalny (aby mógł z niego utworzyć listę z elementami) ps. brak w naszym przypadku, ale jest" if " check
W większości przypadków różnica prędkości nie będzie praktyczna różnica.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-10 12:52:51
Używam []
.
- jest szybszy, ponieważ notacja listy jest zwarciem.
- Tworzenie listy z elementów powinno wyglądać mniej więcej tak samo jak tworzenie listy bez, dlaczego ma być różnica?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-04 08:06:08
Naprawdę Nie wiem o tym, ale wydaje mi się, z doświadczenia, że jpcgt rzeczywiście ma rację. Następujący przykład: Jeśli używam następującego kodu
t = [] # implicit instantiation
t = t.append(1)
W interpreterze, wtedy wywołanie t daje mi tylko "t" bez żadnej listy, a jeśli dopiszę coś innego, np.
t = t.append(2)
Pojawia się błąd "'NoneType' obiekt nie ma atrybutu 'append'". Jeśli jednak stworzę listę przez
t = list() # explicit instantiation
Więc działa dobrze.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-09 13:24:24