在创建列表对象时,Python似乎区分[x]
和list(x)
,其中x
是可迭代的。为什么会有这种区别呢?
>>> a = [dict(a=1)]
>>> a
[{'a': 1}]
>>> a = list(dict(a=1))
>>> a
['a']
第一个表达式似乎按预期工作,而第二个表达式更像是这种方式迭代字典:
>>> l = []
>>> for e in {'a': 1}:
... l.append(e)
>>> l
['a']
[x]
是包含元素 x
的列表。
list(x)
接受一个必须是可迭代的 x
并将其转换为列表。
>>> [1] # list literal
[1]
>>> ['abc'] # list containing 'abc'
['abc']
>>> list(1)
# TypeError
>>> list((1,)) # list constructor
[1]
>>> list('abc') # strings are iterables
['a', 'b', 'c'] # turns string into list!
列表构造函数list(...)
- 就像Python内置的其他集合类型(如set、list、tuple、collections.deque等)一样 - 可以接受一个可迭代的参数并将其转换为列表。
[] == list()
这个表达式可能会让你认为list()
和PHP中的array()
一样,只是另一种语法形式,但实际上并非如此。当没有参数调用list()
时,返回一个空列表;当传入一个可迭代对象时,将其转换为一个列表。list()
不能接收多于一个参数;[x]
不等同于list(x)
,而list(x, y, ...)
则毫无意义。 - Ry-