如何检查列表是否包含空元素?

Ton*_*ony 7 python list python-2.7

假设我有一个空字符串,它将被拆分:

>>>''.split(',')
['']
Run Code Online (Sandbox Code Playgroud)

分裂的结果是[''].我bool用来检查它是否为空.它会回来True.

>>>bool([''])
True
Run Code Online (Sandbox Code Playgroud)

如何检查拆分结果是否为空?

Jim*_*ard 11

随着bool([''])你检查,如果列表中['']有什么内容,它确实,内容恰好是空字符串''.

如果要检查列表中的所有元素是否为"空"(如果列表包含''将返回的字符串False),则可以使用内置函数all():

all(v for v in l)
Run Code Online (Sandbox Code Playgroud)

这将获取v列表中的每个元素l并检查它是否具有True值; 如果所有元素都返回,True如果至少有一个元素没有返回则返回False.举个例子:

l = ''.split(',')

all(v for v in l)
Out[75]: False
Run Code Online (Sandbox Code Playgroud)

您可以将其替换any()为执行部分检查,并查看列表中的任何项l是否具有值True.

两个用途的更全面的示例*:

l = [1, 2, 3, '']

all(l)
# '' doesn't have a True value
Out[82]: False

# 1, 2, 3 have a True value
any(l)
Out[83]: True
Run Code Online (Sandbox Code Playgroud)

*正如@ShadowRanger在评论中指出的那样,同样可以完成同样的事情,all(l)或者any(l)因为他们最终都接受了一个迭代.

  • 简化:将`all(v for v in l)改为`all(l)`; 当`all`可以直接处理`list`时,不需要创建一个特殊的生成器表达式. (3认同)
  • 另外,你把'all`和`any`颠​​倒了; `all`告诉你所有的结果是否都是非空的,如果它有非空元素则告诉你,并且`any`表示它是否有非空元素(它可能仍然是空的,但如果`any`返回'True `,至少有一个是非空的).`any`在这里可能更有用. (3认同)