python将多个返回值分配给多个列表

时间:2012-10-18 16:18:37

标签: python list return-value

我有两个列表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_info更新sibit_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语句检查的那样。

有谁能告诉我它为什么会发生?

2 个答案:

答案 0 :(得分:1)

这是一个猜测:

soft_info_lpbit_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*运营商。