2012-08-02 280 views
5

可能重複:
Creating a list in Python- something sneaky going on?
Creating an empty list in PythonMYLIST =列表()與MYLIST = []在Python

考慮以下幾點:

mylist = list() 

和:

mylist = [] 

使用list()[]有什麼好處 - 應該在某種情況下使用另一種嗎?

+2

我傾向於認爲'[]'會更快,因爲它保存了一個函數調用,但我以前錯了。你是否嘗試過測量這個? – 2012-08-02 15:04:34

+1

@FrédéricHamidi - 我很確定我在之前的SO帖子中看到過這個。我會盡力找到它... – mgilson 2012-08-02 15:05:13

+0

我還沒有嘗試過測量,我會盡快更新,謝謝Frederic – Sherlock 2012-08-02 15:05:26

回答

16

對於一個空的列表,我建議使用[]。這會更快,因爲它避免了內置名稱list的名稱查找。內置名稱也可以用全局或本地名稱覆蓋;這隻會影響list(),而不會影響[]

list()內置的是有用的一些其他的迭代轉換到一個列表,但:

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

爲了完整起見,兩個選項在我的機器上的空列表的時機(Python的2.7.3rc2,英特爾酷睿2):

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

顯式>隱式呢?當我看到「list()」時,我不會眨眼睛。如果我看到「[]」,我會考慮兩次,特別是當我發現python爲dict()和set()引入{}時:? – gsk 2012-08-02 15:16:01

+4

@gsk:包含兩個元素'[1,2]'的列表;一個元素列表:'[1]';沒有元素'[]'的列表。對我來說似乎相當明確。我知道同樣的例子在Python 3中看起來會有所不同 - 這是關於3.x的唯一設計決定,我不喜歡。 – 2012-08-02 15:17:35

+1

@gsk,並且在沒有參數的情況下調用list()時我會考慮兩次。 []對我來說更加明確,而且根據定義......這是定義。 – Logan 2012-08-02 15:23:53

4

兩者是完全等效的,只是它是可能的重新定義標識符list來指代不同的對象。因此,使用[]更安全,除非您希望能夠將list重新定義爲新類型。

從技術上講,使用[]會稍微快一些,因爲它避免了名稱查找。這在任何情況下都不太可能是重要的,除非該計劃經常和激烈地分配清單。

正如Sven所指出的,list有其他用途,但當然這個問題並沒有問到那些問題。

相關問題