代码段:
>>>s = []
>>>len(s)
0
但是:
>>>s = [[]]
>>>len(s)
1
我只声明两个列表,但没有分配任何元素,为什么len()
会给出不同的输出?
答案 0 :(得分:5)
您 分配了一个元素。您的第二个列表包含另一个空列表:
>>> l = [[]]
>>> l
[[]]
>>> len(l)
1
>>> l[0]
[]
>>> len(l[0])
0
如果有帮助,请将您所做的分解为两步;创建一个空列表,然后创建另一个只包含该元素的列表:
>>> l1 = [] # empty
>>> len(l1)
0
>>> l2 = [l1] # one element
>>> l2
[[]]
>>> len(l2)
1
除此之外,我们还有一个对嵌套列表的引用,结果完全相同;包含在另一个列表对象中的空列表。
您可以在外部列表中添加任意数量的空列表;然而,这并没有使外部列表变空:
>>> len([[], [], []])
3
因为外部列表中包含的每个空列表仍然是一个单独的对象。
注意:使用len()
内置函数,不要直接调用__len__
方法。 Python会为您处理这些细节。
如果您想知道所有包含列表的总长度,可以使用:
sum(len(sub) for sub in outer)
或者您可以使用:
not any(outer)
如果你只是想知道所有包含的元素是否为“空”或者被认为是假的。
演示:
>>> s = [[1, 2], [3, 4]] # not empty
>>> not any(s)
False
>>> sum(len(sub) for sub in s)
4
>>> s = [[], []] # all empty
>>> not any(s)
True
>>> sum(len(sub) for sub in s)
0
答案 1 :(得分:4)
在一种情况下,列表中有一个元素:空列表。
s = [[], []]
例如,有两个元素。
s = [[]]
有一个元素和
s = []
为空
答案 2 :(得分:2)
第二个列表确实包含一个元素,这是一个空列表。
答案 3 :(得分:2)
[]
是一个空列表,它没有元素
[[]]
是一个只包含一个元素的列表,一个空列表。
>>> for x in []:
... print(x)
...
>>> for x in [[]]:
... print(x)
...
[]
正如你所看到的,第一个for循环没有打印,因为[]
中没有任何内容。第二个for循环打印[]
,因为[]
内有[[]]
。
如果你从数学中知道集合的概念,这里有一个类比: 设x = {}为空集。然后集{x}包含一个元素(空集)。