7

私はこの現在のリスト内包表記を持っています:

...
cur = [[14, k, j] for j, k in rows[14], range(15)]
...

次のエラーが表示されます。

...        
    cur = [[14, k, j] for j, k in rows[14], range(15)]
ValueError: too many values to unpack

私がこれを修正する方法のように、どんな助けも感謝します。完全な for ループやリスト全体を手動で書き出す必要はありません。ありがとうございました!:D

追加情報:

rows = [{1: '75'},
        {1: '95', 2: '64'}, 
        {1: '17', 2: '47', 3: '82'}, 
        {1: '18', 2: '35', 3: '87', 4: '10'}, 
        {1: '20', 2: '04', 3: '82', 4: '47', 5: '65'}, 
        {1: '19', 2: '01', 3: '23', 4: '75', 5: '03', 6: '34'}, 
        {1: '88', 2: '02', 3: '77', 4: '73', 5: '07', 6: '63', 7: '67'}, 
        {1: '99', 2: '65', 3: '04', 4: '28', 5: '06', 6: '16', 7: '70', 8: '92'}, 
        {1: '41', 2: '41', 3: '26', 4: '56', 5: '83', 6: '40', 7: '80', 8: '70', 9: '33'}, 
        {1: '41', 2: '48', 3: '72', 4: '33', 5: '47', 6: '32', 7: '37', 8: '16', 9: '94', 10: '29'}, 
        {1: '53', 2: '71', 3: '44', 4: '65', 5: '25', 6: '43', 7: '91', 8: '52', 9: '97', 10: '51', 11: '14'}, 
        {1: '70', 2: '11', 3: '33', 4: '28', 5: '77', 6: '73', 7: '17', 8: '78', 9: '39', 10: '68', 11: '17', 12: '57'}, 
        {1: '91', 2: '71', 3: '52', 4: '38', 5: '17', 6: '14', 7: '91', 8: '43', 9: '58', 10: '50', 11: '27', 12: '29', 13: '48'}, 
        {1: '63', 2: '66', 3: '04', 4: '68', 5: '89', 6: '53', 7: '67', 8: '30', 9: '73', 10: '16', 11: '69', 12: '87', 13: '40', 14: '31'}, 
        {1: '04', 2: '62', 3: '98', 4: '27', 5: '23', 6: '09', 7: '70', 8: '98', 9: '73', 10: '93', 11: '38', 12: '53', 13: '60', 14: '04', 15: '23'}]
4

3 に答える 3

9

zipそのように繰り返す必要があります:

cur = [[14, k, j] for j, k in zip(rows[14], range(15))]
于 2013-05-01T11:50:31.367 に答える
5

コードを説明するには:

cur = [[14, k, j] for j, k in rows[14], range(15)]

以下と同じです:

cur = [[14, k, j] for j, k in (rows[14], range(15))]

tupleこれで、 を作成し、それを反復処理していることがより明確にわかります。ループを初めて通過するとき、タプルは 2 つ以上のアイテムを含むディクショナリであると断念するため、 androws[14]にアンパックできません。jk

で述べたようjamylakに、鍵はzip2 つの iterable を一緒にすることです。

cur = [[14, k, j] for j,k in zip(rows[14],range(15))]

ジッパーのように考えることができます。

zip(a,b) = [
   (a[0], b[0]),
   (a[1], b[1]),
   (a[2], b[2]),
   ...
   }

このように書き出すと、構造がジッパーに似ていることがわかります ( とabジッパーの左右の部分です。ジッパーを閉めると、左側の要素と右側の要素が一致します。もちろん、渡すオブジェクトはzipインデックス可能である必要はありません(重要なのは、それらを反復できることだけです)、2つ以上の反復可能オブジェクトを一緒に「圧縮」できます...

于 2013-05-01T11:56:55.167 に答える
2

@jamylak の回答の拡張: または、 map を使用できます

cur = [[14, k, j] for j, k in map(None,rows[14], range(15))]

これにより、短いリストが None で埋められます。

于 2013-05-01T11:56:21.500 に答える