web-dev-qa-db-ja.com

Pythonで2つのイテレータを拡張/連結する方法

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でこれを行う良い方法は何ですか?

16
ywat

itertools.chain を使用:

from itertools import chain
y_iter = chain(l1, l2)

l1からすべてのアイテムが生成され、次にl2からすべてのアイテムが生成されます。生成されたアイテムのシーケンスを効果的に連結します。その過程でそれは両方を消費します。

33
Dan D.

itertoolsが提供するchain()関数を使用できます

itertools.chain()

1
Fuji Komalan