擅长:python、mysql、java
<p>我们可以构造一个索引列表,例如:</p>
<pre><code>from itertools import zip_longest
def ranges(k, n):
for t in zip_longest(range(k-1, -1, -1), range(k+1, n)):
yield from filter(lambda x: x is not None, t)
</code></pre>
<p>这就产生了如下指数:</p>
^{pr2}$
<p>我们可以使用上面的方法来检查最接近的字符:</p>
<pre><code>def close(text, idx):
ci = text[idx]
return next(filter(lambda i: ci == text[i], ranges(idx, len(text))), -1)
</code></pre>
<p>然后得出:</p>
<pre><code>>>> close('adarshravi', 0)
2
>>> close('adarshravi', 1)
-1
>>> close('adarshravi', 2)
0
>>> close('adarshravi', 3)
6
>>> close('adarshravi', 4)
-1
</code></pre>
<p><code>closest</code>就是列表上<code>close</code>函数的“映射”:</p>
<pre><code>from functools import partial
def closest(text, indices):
return map(partial(close, text), indices)
</code></pre>
<p>例如:</p>
<pre><code>>>> list(closest('adarshravi', range(5)))
[2, -1, 0, 6, -1]
</code></pre>