我正在对一个数字列表执行数学函数,但是我得到的是生成器而不是另一个列表的结果。
我尝试过将“ for”循环放在首位,但是它给了我typeMonoidElement
ciphertext = ([((G**block)*([choice(list(range(n)))]**n))%(n**2)] for block in blocks)
我希望输出是数字列表,但我却得到了生成器。
答案 0 :(得分:0)
我不知道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]
还请注意,贤哲允许您执行x^2
而不是x**2
。享受圣人!