私は2つのリストを持っています:
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
私はこのようなものを取得する必要があります:
c = [1, 5, 2, 6, 3, 7, 4, 8]
私はこの解決策を使用します:
c = list(reduce(lambda x, y: x + y, zip(a, b)))
これを行うより良い方法はありますか?
リスト内包表記の使用:
>>> [x for tup in zip(a, b) for x in tup]
[1, 5, 2, 6, 3, 7, 4, 8]
上記の入れ子になったリストの内包表記は、次の入れ子になった for ループと同等です (混乱する場合に備えて)。
result = []
for tup in zip(a, b):
for x in tup:
result.append(x)
使用chain
:
from itertools import chain, izip
interweaved = list(chain.from_iterable(izip(a, b)))
# [1, 5, 2, 6, 3, 7, 4, 8]
また実行可能:
list(sum(zip(a, b), ()))