<h2>更快的选择</h2>
<p>另一种方式:</p>
<pre><code>res = [''] * len(u) * 2
res[::2] = u
res[1::2] = l
print(''.join(res))
</code></pre>
<p>输出:</p>
<pre><code>'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'
</code></pre>
<h2>速度</h2>
<p>看起来更快:</p>
<pre><code>%%timeit
res = [''] * len(u) * 2
res[::2] = u
res[1::2] = l
''.join(res)
100000 loops, best of 3: 4.75 µs per loop
</code></pre>
<p>比目前最快的解决方案:</p>
<pre><code>%timeit "".join(list(chain.from_iterable(zip(u, l))))
100000 loops, best of 3: 6.52 µs per loop
</code></pre>
<p>对于较大的字符串:</p>
<pre><code>l1 = 'A' * 1000000; l2 = 'a' * 1000000
%timeit "".join(list(chain.from_iterable(zip(l1, l2))))
1 loops, best of 3: 151 ms per loop
%%timeit
res = [''] * len(l1) * 2
res[::2] = l1
res[1::2] = l2
''.join(res)
10 loops, best of 3: 92 ms per loop
</code></pre>
<p>Python3.5.1。</p>
<h2>不同长度字符串的变化</h2>
<pre><code>u = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
l = 'abcdefghijkl'
</code></pre>
<h3>较短者决定长度(<code>zip()</code>等效值)</h3>
<pre><code>min_len = min(len(u), len(l))
res = [''] * min_len * 2
res[::2] = u[:min_len]
res[1::2] = l[:min_len]
print(''.join(res))
</code></pre>
<p>输出:</p>
<pre><code>AaBbCcDdEeFfGgHhIiJjKkLl
</code></pre>
<h3>较长的一个决定长度(<code>itertools.zip_longest(fillvalue='')</code>等效值)</h3>
<pre><code>min_len = min(len(u), len(l))
res = [''] * min_len * 2
res[::2] = u[:min_len]
res[1::2] = l[:min_len]
res += u[min_len:] + l[min_len:]
print(''.join(res))
</code></pre>
<p>输出:</p>
<pre><code>AaBbCcDdEeFfGgHhIiJjKkLlMNOPQRSTUVWXYZ
</code></pre>