代码段:
>>>s = []
>>>len(s)
0
Run Code Online (Sandbox Code Playgroud)
然而:
>>>s = [[]]
>>>len(s)
1
Run Code Online (Sandbox Code Playgroud)
我只声明两个列表,但没有分配任何元素,为什么len()给出不同的输出?
你确实分配了一个元素.您的第二个列表包含另一个空列表:
>>> l = [[]]
>>> l
[[]]
>>> len(l)
1
>>> l[0]
[]
>>> len(l[0])
0
Run Code Online (Sandbox Code Playgroud)
如果它有所帮助,请将您所做的分解为两个步骤; 创建一个空列表,然后创建另一个列表只包含一个元素:
>>> l1 = [] # empty
>>> len(l1)
0
>>> l2 = [l1] # one element
>>> l2
[[]]
>>> len(l2)
1
Run Code Online (Sandbox Code Playgroud)
除此之外,我们还有一个对嵌套列表的引用,结果完全相同; 另一个列表对象中包含的空列表.
您可以在外部列表中添加任意数量的空列表; 然而,这不会使外部列表为空:
>>> len([[], [], []])
3
Run Code Online (Sandbox Code Playgroud)
因为外部列表中包含的每个空列表仍然是一个单独的对象.
注意:使用len()内置函数,不要__len__直接调用方法.Python会为您处理这些细节.
如果您想知道所有包含列表的总长度,可以使用:
sum(len(sub) for sub in outer)
Run Code Online (Sandbox Code Playgroud)
或者您可以使用:
not any(outer)
Run Code Online (Sandbox Code Playgroud)
如果你只是想知道所有包含的元素是否为"空"或被认为是假的.
演示:
>>> 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
Run Code Online (Sandbox Code Playgroud)