<p>您可以在递归中使用<a href="https://docs.python.org/3/library/stdtypes.html#str.partition" rel="nofollow noreferrer">^{<cd1>}</a>或<a href="https://docs.python.org/3/library/stdtypes.html#str.find" rel="nofollow noreferrer">^{<cd2>}</a>,如以下示例所示:</p>
<p><strong>使用<code>str.partition()</code>:</strong></p>
<pre><code>def split1(string, delim=' '):
first, sep, rest = string.partition(delim)
return (
[first] if first else []
) + split(rest, delim) if sep else ([first] if first else [])
</code></pre>
<p><strong>使用<code>str.find()</code>:</strong></p>
<pre><code>def split2(string, sep=' '):
if not sep:
raise ValueError('separator length must be >= 1')
index = string.find(sep)
if index < 0:
return [string] if string else []
if len(sep) > 1:
index = len(sep) if not index else index
first, rest = string[:index], string[index:]
else:
first, rest = string[:index], string[index + 1:]
return ([first] if first != sep else []) + split2(rest, sep)
</code></pre>
<p>测试:</p>
<pre><code>word = 'ABC DEF GHI'
seps = [' ', 'DEF', 'ABC', 'GHI', 'C ']
for sep in seps:
print(split1(word, sep), split2(word, sep))
</code></pre>
<p>输出:</p>
<pre><code>['ABC', 'DEF', 'GHI'] ['ABC', 'DEF', 'GHI']
['ABC ', ' GHI'] ['ABC ', ' GHI']
[' DEF GHI'] [' DEF GHI']
['ABC DEF ', ''] ['ABC DEF ']
['AB', 'DEF GHI'] ['AB', 'DEF GHI']
</code></pre>
<p><strong>性能比较:</strong></p>
<pre><code>%timeit split1(word)
690 ns ± 4.56 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit split2(word)
1.18 µs ± 34.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
</code></pre>