如何将生成器变成列表?

how can I turn a generator into a list?

我正在对数字列表执行数学函数,但是我得到的结果是生成器而不是另一个列表。

我尝试将 'for' 循环放在第一位,但它给了我 typeMonoidElement

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

我希望输出是一个数字列表,但我却得到了一个生成器。

我不知道 block 是什么,但一般来说,很多 Python 现在 return 生成器而不是列表。我只是编造了一些东西来完成你的例子。

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

这个returns <generator object <genexpr> at 0x7fcf3c5403c0>之类的。其实,这是一个功能!现在您不必将整个列表保存在内存中,并且可以在您觉得方便的时候对其进行迭代。

但是,如果你想要一个列表,你可以通过两种方式来实现。

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

您使用了圆括号而不是方括号(美式英语用法); parens 生成一个生成器。希望这有帮助。


另外说明一下,您的代码需要很多额外的东西才能工作。我刚刚创建的生成器没有注意到 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。享受圣人!