itertoolsでchainして生成されるのはリストではなくて、itertools.chainクラス。こいつはジェネレータだから、forで最後までループさせると空になるまでnext()しちゃうって訳さ!
以下で動作確認をしてみるね!
import copy
import itertools
ls = [[1,2,3],[4,5,6]]
genr = itertools.chain.from_iterable(ls)
print(type(genr))
# 1が取り出される
print(next(genr))
# 2が取り出される
print(next(genr))
# この時点の要素
print(list(copy.deepcopy(genr)))
# ここでコピーせず、そのままprintすると
# 全要素がnext()されてしまうので注意
# print(list(copy.deepcopy(genr)))
# genr = [] になってしまう
# 奇数を取り出す例
pick_out_odd =[n for n in genr if n % 2 != 0]
print(pick_out_odd)
print(list(genr))
<class 'itertools.chain'>
1
2
[3, 4, 5, 6]
[3, 5]
[]