2つのイテレータを効率的に連結したい。
2つのイテレータ(Python3)があるとします。
l1 = range(10) # iterator over 0, 1, ..., 9
l2 = range(10, 20) # iterator over 10, 11, ..., 19
それらをリストに変換すると、次のように簡単に連結できます
y = list(l1) + list(l2) # 0, 1, ,..., 19
ただし、これは効率的ではありません。
私は何かしたいです
y_iter = l1 + l2 # this does not work
Python3でこれを行う良い方法は何ですか?
itertools.chain
を使用:
from itertools import chain
y_iter = chain(l1, l2)
l1
からすべてのアイテムが生成され、次にl2
からすべてのアイテムが生成されます。生成されたアイテムのシーケンスを効果的に連結します。その過程でそれは両方を消費します。
itertoolsが提供するchain()関数を使用できます
itertools.chain()