擅长:python、mysql、java
<p>在这里它是在一个班轮:</p>
<pre><code>def reverse_chunks(s, k):
return ''.join(s[i:i+k][::-1] for i in range(0, len(s), k))
reverse_chunks("MehranSahami", 3)
# 'heMnarhaSima'
</code></pre>
<p>现在,这一行发生了什么:</p>
<ul>
<li><code>range(0, len(s), k)</code>产生“每<code>k</code>个值,从<code>0</code>开始,在<code>k</code>小于<code>len(s)</code>的最大倍数处停止。对于<code>k = 3</code>,这意味着我们得到<code>i = 0, 3, 6, 9, ...</code></li>
<li><code>s[i:i+k]</code>获取从索引<code>i</code>到索引<code>i+k</code>的子字符串—因此,字符串中的下一个<code>k</code>字符。例如,如果<code>i = 0</code>和<code>k = 3</code>,则<code>s[i:i+k]</code>返回<code>Meh</code>。如果<code>i = 3</code>,那么它就是<code>ran</code>,依此类推。你知道吗</li>
<li>将<code>[::-1]</code>应用于iterable,就像我们刚刚生成的字符串一样,是一种很容易反转它的方法(它意味着“从开始到结束,以步长<code>-1</code>进行切片”)。你知道吗</li>
</ul>
<p>最后,我们使用<code>''.join(...)</code>将这些不同的<code>k</code>字符段缝合回一个整体。你知道吗</p>
<hr/>
<p>如果<em>最后一个</em>段短于<code>k</code>,那么不进行排序就比较困难。但是,您可以在条件中执行此操作:</p>
<pre><code>''.join(s[i:i+k][::-1] if i+k < len(s) else s[i:] for i in range(0, len(s), k))
</code></pre>