2012-10-18 146 views
1

我有兩個列表soft_infobit_filp,我正在使用list comprehension遍歷它,並且有一個函數update,它返回兩個值。代碼如下所示:Python將多個返回值分配給多個列表

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)] 

我想sibit_flipbf更新soft_info

但我得到的錯誤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循環。

誰能告訴我爲什麼發生這種情況?

+1

你爲什麼不這樣做2個步驟先做列表理解,然後打印出來,所以你可以看到它的樣子,然後看到拆包的問題是什麼? –

+0

給我們整個錯誤,請。 – Marcin

+0

另外,什麼是'soft_info_lp'和'bit_flip_record_lp'?你不要在代碼中的任何地方定義它們。 –

回答

1

這裏有一個猜測:

無論soft_info_lp,或bit_flip_record_lp是空的。 所以​​是一個空的列表。這也使得列表理解成爲一個空列表。所以,你最終做

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

導致

ValueError: need more than 0 values to unpack 
1

列表理解返回你的(SI,BF)元組的列表。它看起來像這樣:

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

要分配對來soft_info,和第二元素的第一元素bit_flip,你不能用一個簡單的元組分配新建分配FY,而不是你需要「解壓」列表中爲兩個列表像這樣:

soft_info, bit_flip = zip(*a) 

閱讀上的zip*運營商。