Найти - Пользователи
Полная версия: Генератор списка на основе списка
Начало » Центр помощи » Генератор списка на основе списка
1
FatalLight
Всем привет. Изучил тему “генераторы”. Как утверждает автор создавать список с помощью генератора намного быстрее чем инструкцией for.
Создал список вот так:
step = [2**x for x in range(1, 11)]
Получил первый список степеней двоек от 1 до 10: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024.
Вопрос: Как с помощью подобного выражения (генератора) получить второй список?
Каждый элемент второго списка должен быть равен сумме i+1 элементов певого списка.
т.е. в результате я должен получить список 6, 14, 30, 62, 126, 254, 510, 1022, 2046
FishHook
ЭТО НЕ ГЕНЕРАТОР
FishHook
а это генераторы
FatalLight
Чтал эту книгу https://yadi.sk/d/3Hxbmb8R6_fZQ на стр. 425 подобные выражения называются генераторами. Возможно перевод ввёл меня в заблуждение.
Но всётаки возможно ли получить второй список (пользуясь, как утверждает переводчик - генераторами списков)?
Rodegast
Это списочное выражение или как перевери “генератор списков”, но не генератор т.к. возращает список, а не объект генератора. Что бы получить генератор надо поставить не квадратные скобки, а круглые.
FishHook
#!/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
FatalLight
Результат не тот что нужен, но я понял в каком направлении мыслить. Если получтся обязательно напишу правильный вариант. Спасибо.
py.user.next
>>> 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]
>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB