Je sais qu'il est possible de convertir des générateurs en listes à un "bas niveau" (par exemple. list(i for i in xrange(10))
), mais est-il possible de faire l'inverse sans en parcourant la liste en premier (par exemple. (i for i in range(10))
)?
Edit: a supprimé le mot cast
pour plus de clarté dans ce que j'essaie de réaliser.
Edit 2: En fait, je pense que j'ai peut-être mal compris les générateurs à un niveau fondamental. Cela m'apprendra à ne pas poster SO questions avant mon café du matin!
Essayez ceci: an_iterator = iter(a_list)
... docs here . Est-ce que c'est ce que tu veux?
Vous pouvez retirer une liste d'un itérateur en utilisant la fonction intégrée list(...)
et un itérateur d'une liste en utilisant iter(...)
:
mylist = list(myiterator)
myiterator = iter(mylist)
En effet, votre syntaxe est un itérateur:
iter_10 = (i for i in range(10))
à la place d'utiliser [...]
qui donne une liste.
Jetez un oeil à cette réponse Fonctionnalités cachées de Python
En effet, il est possible qu'une liste possède l'interface de l'itérateur:
list_iter = list.__iter__() # or iter(list), returns list iterator
list_iter.__next__() # list_iter.next() for python 2.x
Alors,
lst_iter = iter(lst)
fait l'affaire.
Bien qu'il soit plus logique d'utiliser des compréhensions et d'en faire un générateur: par ex.
lst_iter_gt_10 = (item for item in lst if item > 10)
Je ne suis pas sûr que vous vouliez dire, mais ce que vous avez tapé est valide Python:
>>> 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