协慌网

登录 贡献 社区

从字符串列表中删除空字符串

我想从 python 中的字符串列表中删除所有空字符串。

我的主意如下所示:

while '' in str_list:
    str_list.remove('')

还有其他 pythonic 方法可以做到这一点吗?

答案

我会使用filter

str_list = filter(None, str_list)
str_list = filter(bool, str_list)
str_list = filter(len, str_list)
str_list = filter(lambda item: item, str_list)

Python 3 从filter返回一个迭代器,因此应包装在对list()

str_list = list(filter(None, str_list))

使用 列表理解是最 Python 的方式:

>>> strings = ["first", "", "second"]
>>> [x for x in strings if x]
['first', 'second']

如果列表必须就地修改,因为还有其他引用必须查看更新后的数据,请使用分片分配:

strings[:] = [x for x in strings if x]

过滤器实际上对此有一个特殊的选择:

filter(None, sequence)

它将滤除所有评估为 False 的元素。此处无需使用实际的可调用对象,例如 bool,len 等。

和 map(bool,...)一样快