<p>如果我理解正确,您希望避免使用空字符串。
您可以使用列表理解,执行以下操作:</p>
<pre><code>chunks = [x for x in str.split('Welcome\n') if x]
</code></pre>
<p>应该能解决你的问题。为什么?</p>
<p>首先,列表理解最后添加了<code>if x</code>,这意味着它将只在列表中包含<em>truthy</em>值(或者更确切地说,将忽略falsy值)</p>
<p>但是为什么你一开始就得到了<code>''</code>?在<a href="https://github.com/python/cpython/blob/459cd61399f589caccae1c0fa2138ebcaaa63ea6/Objects/stringlib/split.h#L165" rel="nofollow noreferrer">source code for ^{<cd3>}</a>处向您指出会更容易:</p>
<pre><code>while (maxcount > 0) {
pos = FASTSEARCH(str+i, str_len-i, sep, sep_len, -1, FAST_SEARCH);
if (pos < 0)
break;
j = i + pos;
SPLIT_ADD(str, i, j);
i = j + sep_len;
}
</code></pre>
<p>基本上,split函数在<code>split(sep)</code>中查找下一次出现的<code>sep</code>,并从上一次出现的<code>maxcount</code>中派生一个子字符串到pos(它将执行<code>maxcount</code>次)。由于您在pos 0中获得了<code>Welcome\n</code>,并且“最后一次出现”为0,因此它将生成一个从0到0的子字符串,这将导致一个空字符串</p>
<p>顺便说一句,对于这样的字符串,您也会得到空字符串:</p>
<blockquote>
<p>'Welcome\nWelcome\nto\nPythonExamples\nWelcome\nto\nPythonExamples'</p>
</blockquote>
<p>代码的结果,无需我的更改:</p>
<blockquote>
<p>['', '', 'to\nPythonExamples\n', 'to\nPythonExamples']</p>
</blockquote>