<pre><code>>>> L1 = [[1, 2], [3, 4], [5, 6]]
>>> L2 =[["a", "b"], ["c", "d"], ["e", "f"]]
>>> [x + y for x,y in zip(L1,L2)]
[[1, 2, 'a', 'b'], [3, 4, 'c', 'd'], [5, 6, 'e', 'f']]
</code></pre>
<p>或者</p>
<pre><code>>>> [sum(x,[]) for x in zip(L1,L2)]
[[1, 2, 'a', 'b'], [3, 4, 'c', 'd'], [5, 6, 'e', 'f']]
</code></pre>
<p>或者</p>
<pre><code>>>> import itertools
>>> [list(itertools.chain(*x)) for x in zip(L1,L2)]
[[1, 2, 'a', 'b'], [3, 4, 'c', 'd'], [5, 6, 'e', 'f']]
</code></pre>
<p>我们也可以不用<code>zip()</code>:</p>
<pre><code>>>> [L1[i] + L2[i] for i in xrange(min(len(L1), len(L2)))]
[[1, 2, 'a', 'b'], [3, 4, 'c', 'd'], [5, 6, 'e', 'f']]
>>> [x + L2[i] for i, x in enumerate(L1)] # assuming len(L1) == len(l2)
[[1, 2, 'a', 'b'], [3, 4, 'c', 'd'], [5, 6, 'e', 'f']]
>>> # same as above, but deals with different lengths
>>> Lx, Ly = ((L2,L1), (L1,L2))[len(L1)<=len(L2)] # shortcut for if/else
>>> [x + Ly[i] for i, x in enumerate(Lx)]
</code></pre>
<hr/>
<h3>一些基准</h3>
<p>以下是迄今为止所提供答案的一些基准。</p>
<p>看起来最流行的答案(<code>[x + y for x,y in zip(L1,L2)]</code>)与<a href="https://stackoverflow.com/questions/7474717/how-to-zip-two-lists-of-lists-in-python/7474813#7474813">@hammar's ^{<cd3>} solution</a>差不多。另一方面,我给出的其他解决方案已经被证明是垃圾!</strike></p>
<p>然而,最快的解决方案(目前)似乎是那些使用列表理解而不使用<code>zip()</code>的解决方案。</p>
<pre><code>[me@home]$ SETUP="L1=[[x,x+1] for x in xrange(10000)];L2=[[x+2,x+3] for x in xrange(10000)]"
[me@home]$ # this raises IndexError if len(L1) > len(L2)
[me@home]$ python -m timeit "$SETUP" "[x + L2[i] for i, x in enumerate(L1)]"
100 loops, best of 3: 10.6 msec per loop
[me@home]$ # same as above, but deals with length inconsistencies
[me@home]$ python -m timeit "$SETUP" "Lx,Ly=((L2,L1),(L1,L2))[len(L1)<=len(L2)];[x + Ly[i] for i, x in enumerate(Lx)]"
100 loops, best of 3: 10.6 msec per loop
[me@home]$ # almost as fast as above, but easier to read
[me@home]$ python -m timeit "$SETUP" "[L1[i] + L2[i] for i in xrange(min(len(L1),len(L2)))]"
100 loops, best of 3: 10.8 msec per loop
[me@home]$ python -m timeit "$SETUP" "L3=[x + y for x,y in zip(L1,L2)]"
100 loops, best of 3: 13.4 msec per loop
[me@home]$ python -m timeit "$SETUP" "L3=map(list.__add__, L1, L2)"
100 loops, best of 3: 13.5 msec per loop
[me@home]$ python -m timeit "$SETUP" "L3=[sum(x,[]) for x in zip(L1,L2)]"
100 loops, best of 3: 18.1 msec per loop
[me@home]$ python -m timeit "$SETUP;import itertools" "L3=[list(itertools.chain(*x)) for x in zip(L1,L2)]"
10 loops, best of 3: 32.9 msec per loop
</code></pre>
<p><a href="https://stackoverflow.com/questions/7474717/how-to-zip-two-lists-of-lists-in-python/7474787#7474787">@Zac's suggestion</a>非常快,但是我们在这里比较苹果和桔子,因为它在<code>L1</code>上执行了列表扩展<em>而不是创建第三个列表。因此,如果不再需要<code>L1</code>,这是一个很好的解决方案。</p>
<pre><code>[me@home]$ python -m timeit "$SETUP" "for index, x in enumerate(L1): x.extend(L2[index])"
100 loops, best of 3: 9.46 msec per loop
</code></pre>
<p>但是,如果<code>L1</code>必须保持完整,那么一旦包含deepcopy,性能将低于标准。</p>
<pre><code>[me@home]$ python -m timeit "$SETUP;from copy import deepcopy" "L3=deepcopy(L1)
> for index, x in enumerate(L1): x.extend(L2[index])"
10 loops, best of 3: 116 msec per loop
</code></pre>