如何删除列表中的空字符串?

时间:2013-04-19 07:41:14

标签: python list

例如,我有一个句子

"He is so .... cool!"

然后我删除所有标点符号并将其放入列表中。

["He", "is", "so", "", "cool"]

如何删除或忽略空字符串?

9 个答案:

答案 0 :(得分:37)

您可以使用filterNone作为关键功能,过滤掉所有False ish的元素(包括空字符串)

>>> lst = ["He", "is", "so", "", "cool"]
>>> filter(None, lst)
['He', 'is', 'so', 'cool']

但请注意,filter返回Python 2中的列表,但是Python 3中的生成器。您需要将其转换为Python 3中的列表,或使用列表推导解决方案。

False ish值包括:

False
None
0
''
[]
()
# and all other empty containers

答案 1 :(得分:19)

你可以像这样过滤它

orig = ["He", "is", "so", "", "cool"]
result = [x for x in orig if x]

或者您可以使用filter。在python 3 filter中返回一个生成器,因此list()将其转换为列表。这也适用于python 2.7

result = list(filter(None, orig))

答案 2 :(得分:6)

您可以使用列表理解:

cleaned = [x for x in your_list if x]

虽然我会使用正则表达式来提取单词:

>>> import re
>>> sentence = 'This is some cool sentence with,    spaces'
>>> re.findall(r'(\w+)', sentence)
['This', 'is', 'some', 'cool', 'sentence', 'with', 'spaces']

答案 3 :(得分:4)

我会给你应该提出的问题的答案 - 如何完全避免空字符串。我假设你这样做某事来得到你的清单:

>>> "He is so .... cool!".replace(".", "").split(" ")
['He', 'is', 'so', '', 'cool!']

重点是您使用.split(" ")分割空格字符。但是,如果您将参数遗漏给split,则会发生这种情况:

>>> "He is so .... cool!".replace(".", "").split()
['He', 'is', 'so', 'cool!']

说文档:

  

如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空格。

所以你真的不需要打扰其他答案(除了Blender's,这是一种完全不同的方法),因为split可以帮你完成工作!

答案 4 :(得分:1)

>>> from string import punctuation
>>> text = "He is so .... cool!"
>>> [w.strip(punctuation) for w in text.split() if w.strip(punctuation)]
['He', 'is', 'so', 'cool']

答案 5 :(得分:1)

Python 3从iterator返回一个filter,因此应该包装在对list()的调用中

str_list = list(filter(None, str_list)) # fastest

答案 6 :(得分:0)

您可以使用列表解析非常轻松地过滤掉空字符串:

x = ["He", "is", "so", "", "cool"]
x = [str for str in x if str]
>>> ['He', 'is', 'so', 'cool']

答案 7 :(得分:0)

您可以使用filter

执行此操作
a = ["He", "is", "so", "", "cool"]
filter(lambda s: len(s) > 0, a)

答案 8 :(得分:0)

lst = ["He", "is", "so", "", "cool"]
lst = list(filter(str.strip, lst))