繁体   English   中英

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

[英]How do I check if the list contains empty elements?

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

>>>''.split(',')
['']

分裂的结果是[''] 我用bool检查它是否为空。 它将返回True

>>>bool([''])
True

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

使用bool([''])你正在检查列表['']是否有任何内容, 它确实是内容恰好是空字符串''

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

all(v for v in l)

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

l = ''.split(',')

all(v for v in l)
Out[75]: False

你可以用它替换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

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

如果空虚是重要的结果,最好先测试原始字符串:

x = ''
if x:
    # Original string was non-empty, split it
    splitx = x.split(',')
    if any(splitx):
        # There was at least one character in the original string that wasn't a comma

第一个测试排除了空的初始字符串,第二个测试使用除了拆分字符之外的any规则,因此返回了一大堆空字符串,但没有非空字符串。 只要你有一个非空字符串,它就会通过。

注意:如果您尝试解析CSV文件,请不要使用.split(',') ; 有一个csv模块可以正确处理(包括转义,引用等),并且应该始终用于解析CSV,永远不会滚动自己的解析器。 额外的奖励: csv''输入转换为[]行,你可以直接测试真实性,而不是像str.split那样[''] 例:

>>> import csv, io

>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n')
>>> [row for row in csv.reader(f) if row]  # Stripping easily
[['a', 'b', 'c'], ['1', '2', '3']]

str.split(',')相同的方法仍然不处理引用,转义等:

>>> f = io.StringIO('\n\na,b,c\n1,2,3\n\n')
>>> stripped = (line.rstrip('\r\n') for line in f)  # Must manually strip line endings first
>>> [line.split(',') for line in stripped if line]
[['a', 'b', 'c'], ['1', '2', '3']]

在你的情况下,它真的不是空的

如果要检查该列表中的元素是否为空,您可以执行以下操作:

string = ''.split(',')

if not string[0]:
    print "empty"

拆分结果不为空。 通过查看原始的非分裂字符串,可以最好地检查您正在寻找的“空虚”感:

if not original_string:
    # It's empty.

但是如果你真的想看看这个的拆分结果:

if len(split_result) == 1 and not split_result[0]:
    # It's "empty".

根据str.split()文档, “使用指定的分隔符拆分空字符串会返回['']。”

要检查这种情况,当您使用显式分隔符(如使用split(",") )时,请执行以下操作:

l = s.split(",")

if len(l) == 1 and l[0] == '':
    print("string was empty")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM