1

我有两个列表soft_infobit_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_infosibit_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)]

我确信 return 正在发回两个值,就像我在 for 循环中使用 print 语句检查一样。

谁能告诉我为什么会这样?

4

2 回答 2

1

列表推导返回一个 (si, bf) 的元组列表。它看起来像这样:

a = [ (1, 2), (3, 4), (5, 6), (7, 8) ]

要将对的第一个元素分配给 soft_info,将第二个元素分配给 bit_flip,您不能使用简单的元组分配,而是需要将列表“解压缩”成两个列表,如下所示:

soft_info, bit_flip = zip(*a)

阅读zipand*运算符。

于 2012-10-18T16:28:14.080 回答
1

这是一个猜测:

要么soft_info_lp,要么bit_flip_record_lp为空。所以这zip(...)是一个空列表。这也使列表理解成为一个空列表。所以你最终会做

In [84]: (soft_info, bit_flip) = []

这导致

ValueError: need more than 0 values to unpack
于 2012-10-18T16:26:52.890 回答