1

リスト内包表記を使用して反復処理している 2 つのリストsoft_infoandがあり、 2 つの値を返す関数があります。コードは次のようになります。bit_filpupdate

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_flipbf

しかし、次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ステートメントを使用して確認したように、returnが2つの値を送り返していると確信しています。

なぜそれが起こっているのか誰か教えてもらえますか?

4

2 に答える 2

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 に答える
1

リスト内包表記は、(si, bf) のタプルのリストを返します。次のようになります。

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

ペアの最初の要素を soft_info に、2 番目の要素を bit_flip に割り当てるには、単純なタプル割り当てを使用できません。代わりに、次のようにリストを 2 つのリストに「解凍」する必要があります。

soft_info, bit_flip = zip(*a)

zipand*演算子について調べてください。

于 2012-10-18T16:28:14.080 に答える