擅长:python、mysql、java
<p>您可以使用<a href="http://docs.python.org/2/library/itertools.html#itertools.izip" rel="nofollow">grouper recipe</a>,<code>zip(*[iterator]*n)</code>来收集项目,而不使用<code>range</code>。在</p>
<pre><code>In [96]: data = 'CAGCAGCAT'
In [97]: [''.join(grp) for grp in zip(*[iter(data)]*3)]
Out[97]: ['CAG', 'CAG', 'CAT']
</code></pre>
<p>如果<code>len(data)</code>不是3的倍数,那么上面的内容将去掉余数。要防止这种情况发生,请使用<a href="http://docs.python.org/2/library/itertools.html#itertools.izip_longest" rel="nofollow">itertools.izip_longest</a>:</p>
^{pr2}$
<hr/>
<p>顺便说一句,grouper recipe可以使用<em>任何</em>迭代器。<code>textwrap.wrap</code>只对字符串有效。此外,石斑鱼的配方更快:</p>
<pre><code>In [100]: %timeit textwrap.wrap(data, 3)
10000 loops, best of 3: 17.7 µs per loop
In [101]: %timeit [''.join(grp) for grp in zip(*[iter(data)]*3)]
100000 loops, best of 3: 1.78 µs per loop
</code></pre>
<p>另请注意,<code>textwrap.wrap</code>如果字符串包含空格,<code>textwrap.wrap</code>可能不会将字符串分组为3个字符的组:</p>
<pre><code>In [42]: textwrap.wrap('I am a hat', 3)
Out[42]: ['I', 'am', 'a', 'hat']
</code></pre>