Форум сайта python.su
Всем привет. Изучил тему “генераторы”. Как утверждает автор создавать список с помощью генератора намного быстрее чем инструкцией for.
Создал список вот так:
step = [2**x for x in range(1, 11)]
Отредактировано FatalLight (Май 28, 2015 12:17:04)
Офлайн
ЭТО НЕ ГЕНЕРАТОР
Офлайн
Офлайн
Чтал эту книгу https://yadi.sk/d/3Hxbmb8R6_fZQ на стр. 425 подобные выражения называются генераторами. Возможно перевод ввёл меня в заблуждение.
Но всётаки возможно ли получить второй список (пользуясь, как утверждает переводчик - генераторами списков)?
Офлайн
Это списочное выражение или как перевери “генератор списков”, но не генератор т.к. возращает список, а не объект генератора. Что бы получить генератор надо поставить не квадратные скобки, а круглые.
Онлайн
#!/usr/bin/env python # -* coding: utf-8 -*- step = [2**x for x in range(1, 11)] step2 = [] step2 = [sum(step2) if step2 else step[0] + x for x in step] print step print step2
Офлайн
Результат не тот что нужен, но я понял в каком направлении мыслить. Если получтся обязательно напишу правильный вариант. Спасибо.
Офлайн
>>> import itertools >>> >>> lst = [2 ** x for x in range(1, 11)] >>> out = list(itertools.accumulate(lst, lambda a, b: a + b))[1:] >>> lst [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024] >>> out [6, 14, 30, 62, 126, 254, 510, 1022, 2046] >>>
Офлайн