<p><code>izip_longest</code>来自<code>itertools</code>是你的朋友。它使用最长的iterable(此处为字符串),并用可设置为所需空格的填充值替换缺少的字符:</p>
<pre><code>from itertools import izip_longest
def f(strings):
return ''.join(
map(lambda x: ''.join(x), izip_longest(*strings, fillvalue=' '))
)
a = ["abcd", "12", "x"]
print(repr(f(a)))
</code></pre>
<p>结果:</p>
<pre><code>'a1xb2 c d '
</code></pre>
<p>用<code>chain</code>代替<code>map</code>和第二个<code>join</code>的变体。你知道吗</p>
<pre><code>def f(strings):
return ''.join(
chain(*izip_longest(*strings, fillvalue=' '))
)
</code></pre>
<p>应用于数组<code>a</code>的最后一个方法的中间步骤:</p>
<pre><code>from pprint import pprint
a1 = izip_longest(*a, fillvalue=' ')
print('# After izip_longest:')
pprint(list(a1))
print('# After chain:')
a1 = izip_longest(*a, fillvalue=' ')
a2 = chain(*a1)
pprint(list(a2))
a1 = izip_longest(*a, fillvalue=' ')
a2 = chain(*a1)
a3 = ''.join(a2)
print('# Result:')
pprint(a3)
</code></pre>
<p>结果:</p>
<pre><code># After izip_longest:
[('a', '1', 'x'), ('b', '2', ' '), ('c', ' ', ' '), ('d', ' ', ' ')]
# After chain:
['a', '1', 'x', 'b', '2', ' ', 'c', ' ', ' ', 'd', ' ', ' ']
# Result:
'a1xb2 c d '
</code></pre>