web-dev-qa-db-ja.com

繰り返し処理せずにリスト型をジェネレーターに変換することは可能ですか?

私はジェネレータを「低レベル」でリストに変換することは可能であることを知っています(例えばlist(i for i in xrange(10)))が、逆なしで最初にリストを反復処理します(例:(i for i in range(10)))?

編集:私が達成しようとしていることを明確にするため、Word castを削除しました。

編集2:実際、私はジェネレーターを根本的なレベルで誤解していると思います。それは、朝のコーヒーの前にSOの質問を投稿しないことを教えてくれます!

32

これを試してください:an_iterator = iter(a_list) ... ここにドキュメント 。それはあなたが望むものですか?

50
John Machin

組み込み関数list(...)を使用してイテレーターからリストを取り出すことができ、iter(...)を使用してリストからイテレーターを取り出すことができます。

mylist = list(myiterator)
myiterator = iter(mylist)

実際、構文イテレータです:

iter_10 = (i for i in range(10))

リストを提供する[...]を使用する代わりに。

この答えをご覧ください Pythonの隠された機能

14
Dona

実際、リストにイテレータインターフェイスが含まれている可能性があります。

list_iter = list.__iter__() # or iter(list), returns list iterator
list_iter.__next__() # list_iter.next() for python 2.x

そう、

lst_iter = iter(lst)

トリックを行います。

理解を使用し、それからジェネレーターを作成する方が理にかなっていますが:.

lst_iter_gt_10 = (item for item in lst if item > 10)
7
Zaur Nasibov

意味はわかりませんが、入力した内容は有効ですPython code:

>>> x = (i for i in range(10))
>>> x
<generator object at 0xb7f05f6c>
>>> for i in x: print i
0
1
2
3
4
5
6
7
8
9
4
tylerl