簡體   English   中英

將Iterators鏈接到Flat Iterator

[英]Chaining Iterators To Flat Iterator

嘗試使用itertools中的鏈來解決我的問題。 我有一個迭代器列表,我想得到一個迭代器,以無縫方式迭代列表中的迭代器項。 有辦法嗎? 也許另一種工具而不是鏈條會更合適?

我的代碼的簡化示例:

iter1 = iter([1,2])
iter2 = iter([3,4])
iter_list = [iter1, iter2]
chained_iter = chain(iter_list)

期望的結果:

chained_iter.next() --> 1
chained_iter.next() --> 2
chained_iter.next() --> 3
chained_iter.next() --> 4

實際結果:

chained_iter.next() --> <listiterator at 0x10f374650>

您想使用itertools.chain.from_iterable()代替:

chained_iter = chain.from_iterable(iter_list)

您將一個iterable傳遞給chain() ; 它旨在從多個迭代中獲取元素並將它們鏈接起來。 單個迭代包含更多迭代器並不重要。

您也可以使用*語法應用該列表:

chained_iter = chain(*iter_list)

這適用於列表,但如果iter_list本身是一個無限的迭代器,你可能不希望Python嘗試將其擴展為單獨的參數。

演示:

>>> from itertools import chain
>>> iter1 = iter([1, 2])
>>> iter2 = iter([3, 4])
>>> iter_list = [iter1, iter2]
>>> chained_iter = chain.from_iterable(iter_list)
>>> next(chained_iter)
1
>>> next(chained_iter)
2
>>> next(chained_iter)
3
>>> next(chained_iter)
4

你可以這樣試試:

>>> from itertools import chain
>>> iter1 = iter([1,2])
>>> iter2 = iter([3,4])
>>> iter_list = [iter1, iter2]
>>> chained_iter = chain(*iter_list)
>>> next(chained_iter)
1
>>> next(chained_iter)
2
>>> next(chained_iter)
3
>>> next(chained_iter)
4
>>>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM