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

在python中从列表中删除空字符串,python,regex,split,Python,Regex,Split,我需要分开一根绳子。我用的是: def ParseStringFile(string): p = re.compile('\W+') result = p.split(string) 但我有一个错误:我的结果有两个空字符串(“”),一个在“ЛЛаа”之前。我怎样才能摆脱它们 正如NHAHDH指出的,空字符串是预期的,因为在字符串的开始和结束处都有一个\n,但是如果它们困扰您,您可以非常快速有效地过滤它们 >>> filter(None, ['', 'text', 'more

我需要分开一根绳子。我用的是:

def ParseStringFile(string):
p = re.compile('\W+')
result = p.split(string)
但我有一个错误:我的结果有两个空字符串(“”),一个在“ЛЛаа”之前。我怎样才能摆脱它们


正如NHAHDH指出的,空字符串是预期的,因为在字符串的开始和结束处都有一个
\n
,但是如果它们困扰您,您可以
非常快速有效地过滤它们

>>> filter(None, ['', 'text', 'more text', ''])
['text', 'more text']

正如NHAHDH所指出的,空字符串是应该出现的,因为在字符串的开头和结尾都有一个
\n
,但是如果它们打扰了你,你可以
快速有效地过滤它们

>>> filter(None, ['', 'text', 'more text', ''])
['text', 'more text']

在匹配字符串之前,可以删除字符串中的所有换行符:

p.split(string.strip('\n'))
或者,拆分字符串,然后删除第一个和最后一个元素:

result = p.split(string)[1:-1]
[1:-1]
获取结果的副本,包括从1开始(即删除第一个元素)到-2结束的所有索引(即从第二个到最后一个元素。第二个索引是独占的)

一个较长且不太优雅的替代方案是修改现有列表:

result = p.split(string)
del result[-1]   # remove last element
del result[0]    # remove first element
请注意,在这两种解决方案中,第一个和最后一个元素必须是空字符串。如果有时输入的开头或结尾不包含这些空字符串,那么它们就会出现错误。然而,它们也是最快的解决方案

如果要删除结果中的所有空字符串,即使它们发生在结果列表中,也可以使用列表理解:

[word for word in p.split(string) if word]

在匹配字符串之前,可以删除字符串中的所有换行符:

p.split(string.strip('\n'))
或者,拆分字符串,然后删除第一个和最后一个元素:

result = p.split(string)[1:-1]
[1:-1]
获取结果的副本,包括从1开始(即删除第一个元素)到-2结束的所有索引(即从第二个到最后一个元素。第二个索引是独占的)

一个较长且不太优雅的替代方案是修改现有列表:

result = p.split(string)
del result[-1]   # remove last element
del result[0]    # remove first element
请注意,在这两种解决方案中,第一个和最后一个元素必须是空字符串。如果有时输入的开头或结尾不包含这些空字符串,那么它们就会出现错误。然而,它们也是最快的解决方案

如果要删除结果中的所有空字符串,即使它们发生在结果列表中,也可以使用列表理解:

[word for word in p.split(string) if word]

不,它工作正常。空字符串是由于字符串开头有额外的新行。在使用split?否之前,我需要删除列表的第一个和最后一个空(“”)元素。它工作正常。空字符串是因为字符串开头有一个额外的新行。nhahtdh在使用split之前,我需要删除列表的第一个和最后一个空(“”)元素,这是
filter
实际击败列表comps的少数实例之一@在这种情况下,我怀疑速度是否重要,但可读性确实重要,我更喜欢列表理解。同样在python3
中,filter
不会生成列表,这可能是OP想要的,也可能不是OP想要的。另外,如果速度很重要,那么使用
[1:-1]
会快得多,因为它完全避免了所有的真实性测试。这是合理的,我想你可能想知道。一般认为像
filter
map
这样的东西应该很少使用,这是我真正需要为
filter
解决方案争论的一个例子。速度提高5倍,直观地说,您正在过滤列表,但这两种方法都是准确的解决方案。[1:-1]对我来说似乎非常脆弱。@SlaterTyranus,答案来自2010年。在我的机器上,我得到了完全不同的结果,尽管带有
None
filter
显然仍然是最快的(在python2上大约是2.8倍,在python3上大约是85%)。在过去的4年里,似乎在优化解释器方面做了相当好的工作。过滤器解决方案的速度如何?我不想使用[1;-1]解决方案,因为文本不必有“”符号,所有站点都有各种各样的实例,
filter
实际上击败了列表comp@在这种情况下,我怀疑速度是否重要,但可读性确实重要,我更喜欢列表理解。同样在python3
中,filter
不会生成列表,这可能是OP想要的,也可能不是OP想要的。另外,如果速度很重要,那么使用
[1:-1]
会快得多,因为它完全避免了所有的真实性测试。这是合理的,我想你可能想知道。一般认为像
filter
map
这样的东西应该很少使用,这是我真正需要为
filter
解决方案争论的一个例子。速度提高5倍,直观地说,您正在过滤列表,但这两种方法都是准确的解决方案。[1:-1]对我来说似乎非常脆弱。@SlaterTyranus,答案来自2010年。在我的机器上,我得到了完全不同的结果,尽管带有
None
filter
显然仍然是最快的(在python2上大约是2.8倍,在python3上大约是85%)。在过去的4年里,似乎在优化解释器方面做了相当好的工作。过滤器解决方案的速度如何?我不想使用[1;-1]解决方案,因为文本不必有“”符号,所有站点都不同