拆分不带空字符串的python字符串

拆分不带空字符串的python字符串,python,python-3.x,split,Python,Python 3.x,Split,以下代码: str = 'Welcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples' chunks = str.split('\n') print(chunks) 正确打印出: ['Welcome', 'to', 'PythonExamples', 'Welcome', 'to', 'PythonExamples'] ['', 'to\nPythonExamples\n', 'to\nPythonExamples'] 我想将字符串拆分

以下代码:

str = 'Welcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples'
chunks = str.split('\n')
print(chunks)
正确打印出:

['Welcome', 'to', 'PythonExamples', 'Welcome', 'to', 'PythonExamples']
['', 'to\nPythonExamples\n', 'to\nPythonExamples']
我想将字符串拆分为以'Welcome\n'开头的字符串,因此我尝试了以下方法:

str = 'Welcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples'
chunks = str.split('Welcome\n')
print(chunks)
但是这个打印出来:

['Welcome', 'to', 'PythonExamples', 'Welcome', 'to', 'PythonExamples']
['', 'to\nPythonExamples\n', 'to\nPythonExamples']
注意第一个条目是如何为空的。 我如何正确地将其拆分,以便输出是正确的

['to\nPythonExamples\n', 'to\nPythonExamples']

您可以过滤掉空条目。还应避免使用
str
,因为它是一个内置函数。既然
是虚假的,你甚至不需要比较

inp = 'Welcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples'
chunks = list(filter(None, inp.split('Welcome\n')))
print(chunks)

如果我理解正确,您希望避免使用空字符串。 您可以使用列表理解,执行以下操作:

chunks = [x for x in str.split('Welcome\n') if x]
应该能解决你的问题。为什么?

首先,列表理解最后添加了
如果x
,这意味着它将只在列表中包含truthy值(或者更确切地说,将忽略falsy值)

但是为什么你一开始就得到了
'
?你可以更容易地指出:

while(最大计数-->0){
pos=快速搜索(str+i,str\u len-i,sep,sep\u len,-1,快速搜索);
如果(位置<0)
打破
j=i+pos;
分割加(str,i,j);
i=j+sep_len;
}
基本上,split函数在
split(sep)
中查找下一次出现的
sep
,并从上一次出现的sep派生一个子字符串到pos(它将执行
maxcount
次)。由于您在pos 0中获得了
Welcome\n
,并且您的“最后一次出现”为0,因此它将生成一个从0到0的子字符串,这将导致一个空字符串

顺便说一句,对于这样的字符串,您也会得到空字符串:

'欢迎\nHelpCome\nto\nPython示例\nHelpCome\nto\nPython示例'

代码的结果,无需我的更改:

[“”,,“至\nPythonExamples\n”,“至\nPythonExamples']


一种非常干净和通灵的方法是使用
None
。另一方面,
str
是Python中的关键字,不应将其用作变量名

text = 'Welcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples'
chunks = text.split('Welcome\n')
chunks = filter(None, chunks)
print(list(chunks))
#['to\nPythonExamples\n', 'to\nPythonExamples']

通过comphrension删除空字符串?只是澄清一下,唯一困扰您的是可能出现的空字符串?我假设因为空字符串在那里,所以我正在错误地解析它。我想知道为什么空值在这种情况下是不必要的
lambda
。您可以直接使用
filter(None,chunks)
。嗯,如果它是
None
,那么它可能会隐式地将
lambda x:x
用作函数。有趣的是,最好使用None,因为它在源代码中使用了它,所以会更新它以获得改进
chunks=list(filter(None,chunks))
否则,
将作为筛选对象打印。您知道为什么第一个条目为空吗?当然,让我将其添加到answer@HarryBoy,我在回答中增加了这一部分。如果您还有任何问题,请告诉我:)GL