我有两个列表soft_info
和bit_filp
,我使用列表推导迭代它,并且有一个函数update
,它返回两个值。代码如下:
def update(si,bf):
............
I do some stuff here and update value of si and bf
...........
return(si,bf)
def main(args=None):
bytes =256
soft_info = [-75] * (8 * bytes)
bit_flip = [0] * (8 * bytes)
(soft_info, bit_flip)=[update(si,bf)
for si,bf in zip(soft_info,bit_flip)]
我想使用soft_info
更新si
,bit_flip
更新bf
。
但我收到了错误ValueError: need more than 0 values to unpack
:
(soft_info, bit_flip)=[update(si,bf) for si,bf in zip(soft_info,bit_flip)]
我确信返回正在发回两个值,就像我在for循环中使用print语句检查的那样。
有谁能告诉我它为什么会发生?
答案 0 :(得分:1)
这是一个猜测:
soft_info_lp
或bit_flip_record_lp
为空。
所以zip(...)
是一个空列表。这使得列表理解也是一个空列表。所以你最终做了
In [84]: (soft_info, bit_flip) = []
导致
ValueError: need more than 0 values to unpack
答案 1 :(得分:1)
list comprehension返回(si,bf)元组的列表。它看起来像这样:
a = [ (1, 2), (3, 4), (5, 6), (7, 8) ]
要将对的第一个元素分配给soft_info,将第二个元素分配给bit_flip,则不能使用简单的元组分配,而是需要将列表“解压缩”为两个列表,如下所示:
soft_info, bit_flip = zip(*a)
阅读zip
和*
运营商。