在Python中使用[]和list()之间的区别

时间:2014-05-16 19:22:39

标签: python list

有人可以解释这段代码吗?

l3 = [ {'from': 55, 'till': 55, 'interest': 15}, ]
l4 = list( {'from': 55, 'till': 55, 'interest': 15}, )

print l3, type(l3)
print l4, type(l4)

输出:

[{'till': 55, 'from': 55, 'interest': 15}] <type 'list'>
['till', 'from', 'interest'] <type 'list'>

4 个答案:

答案 0 :(得分:21)

dict对象转换为列表时,只需要键。

但是,如果用方括号括起来,它会使所有内容保持不变,只会使其成为dict的列表,其中只包含一个项目。

>>> obj = {1: 2, 3: 4, 5: 6, 7: 8}
>>> list(obj)
[1, 3, 5, 7]
>>> [obj]
[{1: 2, 3: 4, 5: 6, 7: 8}]
>>> 

这是因为当你使用for循环进行循环时,它只需要键:

>>> for k in obj:
...     print k
... 
1
3
5
7
>>> 

但是,如果您想获取值值,请使用.items()

>>> list(obj.items())
[(1, 2), (3, 4), (5, 6), (7, 8)]
>>> 

使用for循环:

>>> for k, v in obj.items():
...     print k, v
... 
1 2
3 4
5 6
7 8
>>> 

但是,当您输入list.__doc__时,它会与[].__doc__相同:

>>> print list.__doc__
list() -> new list
list(sequence) -> new list initialized from sequence's items
>>> 
>>> print [].__doc__
list() -> new list
list(sequence) -> new list initialized from sequence's items
>>> 

有点误导:)

答案 1 :(得分:7)

  • 前者只是将整个项目包装在方括号[]中,使其成为单项列表:

    >>> [{'foo': 1, 'bar': 2}]
    [{'foo': 1, 'bar': 2}]
    
  • 后者遍历字典(获取密钥)并从中生成一个列表:

    >>> list({'foo': 1, 'bar': 2})
    ['foo', 'bar']
    

答案 2 :(得分:3)

>>> help(list)

Help on class list in module __builtin__:

class list(object)
 |  list() -> new empty list
 |  list(iterable) -> new list initialized from iterable's items

在第一种情况下,符号表示您正在创建以字典作为其对象的列表。列表创建为空,字典作为对象附加。

在第二种情况下,您将调用列表构造函数的第二种形式 - &#34;从可迭代的项目&#34;中初始化。在字典中,它是可迭代的键,因此您可以获得字典键列表。

答案 3 :(得分:3)

列表是一个构造函数,它将采用任何基本序列(如元组,字典,其他列表等)并可以将它们转换为列表。或者,您可以使用[]创建列表,它将列出包含在括号内的所有内容。实际上你可以用列表理解来完成同样的事情。

 13 = [item for item in {'from': 55, 'till': 55, 'interest': 15}]
 14 = list({'from': 55, 'till': 55, 'interest': 15})