我只是在Python中随机观察了以下内容,并且很好奇知道为什么它的值为False:
list(list()) == [[]]
有趣的是,如果您通过以下方式重新排列语法,第一种方式的评估结果为False,第二种方式的评估结果为True:
list([]) == [[]]
[list()] == [[]]
这里的内幕是什么?
答案 0 :(得分:11)
从documentation on the list
constructor
类 列表([[可迭代])
返回一个列表,该列表的项目与可迭代的项目相同,并且顺序相同。 iterable 可以是序列,支持迭代的容器或迭代器对象。如果 iterable 已经是列表,则复制并返回一个副本,类似于
iterable[:]
。例如,list('abc')
返回['a', 'b', 'c']
,而list( (1, 2, 3) )
返回[1, 2, 3]
。如果未提供任何参数,则返回一个新的空列表[]
。
当您将list
传递给list()
时,它返回一个副本,而不是嵌套列表,而[[]]
创建一个空的嵌套列表。
答案 1 :(得分:7)
list
不会构造包含其参数的列表。它构造一个列表,其元素包含在其参数中。 list([])
不返回[[]]
;它返回[]
。因此,list(list()) == list([]) == []
。
答案 2 :(得分:6)
list(...)
的构造函数与列表文字[...]
的作用不同。 constructor接受任何 iterable 并列出其项目
>>> list((1, 2, 3))
[1, 2, 3]
>>> list("foo")
['f', 'o', 'o']
>>> list(list())
列表字面量定义的列表完全包含枚举项
>>> [(1, 2, 3)]
[(1, 2, 3)]
>>> ["foo"]
['foo']
>>> [[]]
[[]]
请注意,list()
在不带任何参数的情况下产生的结果与[]
相同。
答案 3 :(得分:3)
当您执行list(list())
时,您将创建一个列表并将其即时转换为列表。因此,您最终得到一个空列表,而不是一个嵌套列表。