2012-08-02 282 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有其他用途,但当然这个问题并没有问到那些问题。

相关问题