<pre><code>>>> chained = itertools.chain.from_iterable(sixbit)
>>> [''.join(bits) for bits in itertools.izip(*[chained]*8)]
['00001100', '00010101', '00100001']
</code></pre>
<h2>解释</h2>
<p><code>chained</code>只是原始字符串所有字母的迭代器。它使用来自<code>itertools</code>的<a href="http://docs.python.org/2/library/itertools.html#itertools.chain.from_iterable">^{<cd1>}</a>函数。在</p>
^{pr2}$
<p><code>[chained]*8</code>创建包含相同<strong>对象的列表8次。在</p>
<p><code>*</code>只需将这8个元素解压为<a href="http://docs.python.org/2/library/itertools.html#itertools.izip">^{<cd7>}</a>参数。在</p>
<p><a href="http://docs.python.org/2/library/itertools.html#itertools.izip">^{<cd7>}</a>只返回元组,其中第一个元组包含参数中每个链式迭代器的第一个字母,第二个元组包含第二个字母等。有8个链接对象,因此每个元组中有8个字母。在</p>
<p>最重要的是,字母来自每个迭代器,但实际上是同一迭代器的8个实例。每次通话都会消耗掉它。所以第一个元组包含链式迭代器的前8个字母。在</p>
<pre><code>>>> chained = itertools.chain.from_iterable(sixbit)
>>> list(itertools.izip(*[chained]*8))
[('0', '0', '0', '0', '1', '1', '0', '0'), ('0', '0', '0', '1', '0', '1', '0', '1'), ('0', '0', '1', '0', '0', '0', '0', '1')]
</code></pre>
<p>在最后一步,我们将他们加入到列表理解中:</p>
<pre><code>>>> chained = itertools.chain.from_iterable(sixbit)
>>> [''.join(bits) for bits in itertools.izip(*[chained]*8)]
['00001100', '00010101', '00100001']
</code></pre>