Ответ 1
Попробуйте следующее: an_iterator = iter(a_list)
... docs here. Это то, что вы хотите?
Я знаю, что можно преобразовать генераторы в списки на "низкоуровневом" (например, list(i for i in xrange(10))
), но можно ли сделать обратное, не перебирая сначала список (например. (i for i in range(10))
)?
Изменить: удалено слово cast
для ясности в том, чего я пытаюсь достичь.
Изменить 2: На самом деле, я думаю, что я, возможно, неправильно понял генераторов на фундаментальном уровне. Это научит меня не ставить вопросы SO перед утренним кофе!
Попробуйте следующее: an_iterator = iter(a_list)
... docs here. Это то, что вы хотите?
Вы можете взять список из итератора, используя встроенную функцию list(...)
и итератор из списка с помощью iter(...)
:
mylist = list(myiterator)
myiterator = iter(mylist)
Действительно, ваш синтаксис есть итератор:
iter_10 = (i for i in range(10))
вместо [...]
, который дает список.
Посмотрите на этот ответ Скрытые функции Python
Я не уверен, что вы имеете в виду, но то, что вы набрали, является допустимым кодом 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
Действительно, возможно, что список обладает интерфейсом итератора:
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)