У меня есть foll. список в Python:Частичные списки Itertools python
[1, 2, 3, 4]
Есть ли функция питона itertools, что приводит к Фоллю:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
У меня есть foll. список в Python:Частичные списки Itertools python
[1, 2, 3, 4]
Есть ли функция питона itertools, что приводит к Фоллю:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
Это тривиальное без itertools:
def fall(it):
ls = []
for x in it:
ls.append(x)
yield ls
for x in fall(xrange(20)):
print x
Обратите внимание, что это работает с любой итерацией, а не только список.
Если вы все еще хотите itertools, что-то, как это должно работать (PY3):
for x in itertools.accumulate(map(lambda x: [x], it)):
print(x)
Опять же, это ленивая и работает с любой итерацией.
Существует нет ничего в itertools
, что я могу думать, но это должно работать:
def incremental(L):
for i in range(1, len(L)+1):
yield L[:i]
Выход:
In [53]: print(*incremental([1, 2, 3, 4]), sep='\n')
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
Если необходимо использовать itertools
, вы может использовать itertools.islice
как:
from itertools import islice
my_list = [1, 2, 3, 4]
for i in range(1, len(my_list)+1):
print list(islice(my_list, i))
Однако здесь абсолютно нет необходимости использовать itertools
. Вы можете добиться этого с помощью простого списка нарезки как:
for i in range(len(my_list)):
print my_list[:i+1]
Оба вышеуказанных решений распечатывают результат, как:
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
Вам не нужно itertools
, просто использовать карту:
>>> l = [1, 2, 3, 4]
>>> for sub_list in map(lambda index: l[:index + 1], range(len(l))):
... print sub_list
Это можно записать в виде одного вкладыша, используя список понимания:
>>> [ list[:x+1] for x in range(len(list)) ]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]]
Одно из решений линии, используя partial и islice,
from itertools import islice
from functools import partial
my_list = [1, 2, 3, 4]
[list(l) for l in map(partial(islice, my_list), range(1,len(my_list)+1))]
вы получите,
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4]]
другими словами,
from itertools import islice
from functools import partial
my_list = [1, 2, 3, 4]
p = partial(islice, my_list)
for i in range(1,5):
print(list(p(i)))
вы получите,
[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]