2012-08-02 11 views
5

Możliwe zduplikowane:
Creating a list in Python- something sneaky going on?
Creating an empty list in Pythonmojalista = lista() vs wypożyczane = [] Pythona

rozważyć następujące:

mylist = list() 

a:

mylist = [] 

Czy istnieje jakaś korzyść z używania list() lub [] - czy należy stosować w stosunku do innych w pewnych sytuacjach?

+2

Jestem skłonny pomyśleć, że literówka '[]' będzie szybsza, ponieważ zapisuje wywołanie funkcji, ale wcześniej popełniłem błąd. Czy próbowałeś to zmierzyć? –

+1

@ FrédéricHamidi - Jestem prawie pewien, że widziałem to wcześniej w poście SO. Spróbuję to znaleźć ... – mgilson

+0

Nie próbowałem pomiarów, spróbuję i zaktualizuję wkrótce, dzięki Frederic – Sherlock

Odpowiedz

16

Dla pustej listy, polecam używanie []. Będzie to szybsze, ponieważ unika szukania nazwy dla wbudowanej nazwy list. Wbudowana nazwa może również zostać nadpisana globalną lub lokalną nazwą; wpłynęłoby to tylko na list(), a nie [].

list() wbudowany jest przydatna do konwersji innego iterable do listy, choć:

a = (1, 2, 3) 
b = list(a) 

Dla kompletności synchronizacją dla dwóch opcji pustych list na moim komputerze (Python 2.7.3rc2, Core 2 Duo)

In [1]: %timeit [] 
10000000 loops, best of 3: 35 ns per loop 

In [2]: %timeit list() 
10000000 loops, best of 3: 145 ns per loop 
+0

Co z jawnymi> niejawnymi? Kiedy widzę "list()", nie mrugam okiem. Jeśli widzę "[]" myślę dwa razy, szczególnie gdy dowiedziałem się, że pyton wprowadza {} dla obu dict() i set(): o – gsk

+4

@gsk: Lista z dwoma elementami '[1, 2]'; lista z jednym elementem: '[1]'; lista bez elementów '[]'. Wydaje mi się dość wyraźny. Wiem, że ten sam przykład wyglądałby inaczej w przypadku zestawów w Pythonie 3 - chodzi o jedyną decyzję projektową dla 3.x, której nie lubię. –

+1

@gsk i myślę, że dwa razy, gdy list() jest wywoływana bez parametrów. [] jest dla mnie bardziej wyraźny, a rodzaj jest z definicji ... ponieważ taka jest definicja. – Logan

4

Oba całkowicie równoważny, z tym, że możliwe jest ponowne określenie identyfikatora list w odniesieniu do innego przedmiotu. W związku z tym bezpieczniej jest używać [], chyba że chcesz móc ponownie zdefiniować list jako nowy typ.

Technicznie, użycie [] będzie bardzo nieznacznie szybsze, ponieważ pozwala uniknąć szukania imienia. Jest to mało prawdopodobne, aby miało to znaczenie w każdym przypadku, chyba że program stale i wściekle przydziela listy.

Jak zauważa Sven, list ma inne zastosowania, ale oczywiście pytanie o nie nie pyta.