Уведомления

Группа в Telegram: @pythonsu

#1 Май 28, 2015 12:13:55

FatalLight
Зарегистрирован: 2015-05-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

Всем привет. Изучил тему “генераторы”. Как утверждает автор создавать список с помощью генератора намного быстрее чем инструкцией 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

Отредактировано FatalLight (Май 28, 2015 12:17:04)

Офлайн

#2 Май 28, 2015 12:20:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

ЭТО НЕ ГЕНЕРАТОР



Офлайн

#3 Май 28, 2015 12:21:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

Офлайн

#4 Май 28, 2015 12:30:30

FatalLight
Зарегистрирован: 2015-05-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

Чтал эту книгу https://yadi.sk/d/3Hxbmb8R6_fZQ на стр. 425 подобные выражения называются генераторами. Возможно перевод ввёл меня в заблуждение.
Но всётаки возможно ли получить второй список (пользуясь, как утверждает переводчик - генераторами списков)?

Офлайн

#5 Май 28, 2015 12:39:23

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2704
Репутация: +  182  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

Это списочное выражение или как перевери “генератор списков”, но не генератор т.к. возращает список, а не объект генератора. Что бы получить генератор надо поставить не квадратные скобки, а круглые.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Май 28, 2015 13:10:09

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

#!/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



Офлайн

#7 Май 28, 2015 13:42:40

FatalLight
Зарегистрирован: 2015-05-28
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

Результат не тот что нужен, но я понял в каком направлении мыслить. Если получтся обязательно напишу правильный вариант. Спасибо.

Офлайн

#8 Май 28, 2015 13:57:27

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9746
Репутация: +  843  -
Профиль   Отправить e-mail  

Генератор списка на основе списка

>>> 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]
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version