как я могу превратить генератор в список? - PullRequest
0 голосов
/ 08 апреля 2019

Я выполняю математическую функцию для списка чисел, но получаю результат в виде генератора вместо другого списка.

Я попытался сначала поместить цикл 'for', но он дает мне typeMonoidElement

ciphertext =  ([((G**block)*([choice(list(range(n)))]**n))%(n**2)] for block in blocks)

Я ожидал, что вывод будет список чисел, но вместо этого я получаю генератор.

1 Ответ

0 голосов
/ 09 апреля 2019

Я не знаю, что такое block, но в целом многие вещи Python теперь возвращают генераторы вместо списков.Я просто что-то придумал, чтобы завершить ваш пример.

blocks = [1,2,24,5]
ciphertext =  ([((G**block)*([choice(list(range(n)))]**n))%(n**2)] for block in blocks)
cipher text

Это возвращает <generator object <genexpr> at 0x7fcf3c5403c0> или подобное.На самом деле, это особенность!Теперь вам не нужно хранить весь список в памяти, и вы можете перебирать его в любое удобное для вас время.

Однако, если вам нужен список, вы можете сделать это двумя способами.

  • list(cipher text)
  • [block^2 for block in blocks]

Вы использовали скобки, а не скобки (в американском английском);Паренс делает генератор.Надеюсь, это поможет.


В отдельном примечании вашему коду нужно много дополнительных вещей для работы.Генератор, который я только что создал, не замечает, что G не определен, и что n в настоящее время является функцией, а не целым числом!Это более простой пример того же.

blocks = [1,2,24,5]
ciphertext =  (block^2 for block in blocks)
print ciphertext
list(cipher text)

<generator object <genexpr> at 0x7fcf3c540410>
[1, 4, 576, 25]

Также обратите внимание, что в Sage вам разрешено делать x^2 вместо x**2.Наслаждайся Мудрецом!

...