如何将生成器变成列表?
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
。享受圣人!
我正在对数字列表执行数学函数,但是我得到的结果是生成器而不是另一个列表。
我尝试将 '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
。享受圣人!