一个可迭代对象 x,使用 list(x) 和 [x] 有什么区别?

4

在创建列表对象时,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']

3
[] == list()这个表达式可能会让你认为list()和PHP中的array()一样,只是另一种语法形式,但实际上并非如此。当没有参数调用list()时,返回一个空列表;当传入一个可迭代对象时,将其转换为一个列表。list()不能接收多于一个参数;[x]不等同于list(x),而list(x, y, ...)则毫无意义。 - Ry-
1个回答

13

[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等)一样 - 可以接受一个可迭代的参数并将其转换为列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接