【python学習ノート】forループ2つのリストを巡る失敗——ValueError:too many values to unpack


for 2つのリストをループすることに失敗しました.ValueError:too many values to unpack
  • forループ2つのリストを巡る失敗-ValueError:too many values to unpack
  • 問題の出所:
  • なぜ間違えたのですか?
  • 私たちはいったい2つのリストのforループをどのように処理すればいいのでしょうか.


  • 問題のソース:
    私は今2つのリストを持っていて、1つはタイトルで、1つはアクセス量で、私は1つのforサイクルの中で、この2つのリストの中で同じ位置の値を取得して、それから印刷して、前にPythonのforが2つのリストを反復することができることを見たことがあるように覚えていて、私は次の世代コードを書きました:
    #           ——
    # self.view_list = ["12","15"]
    # self.title_list = ["    a","     b"]
    for v,t in self.view_list,self.title_list:
         print "----------***----------
    : 《%s》
    : %s"
    %(t,v)

    ValueError:too many values to unpack
    どうしたの?
    私は何をしましたか.このエラーを直接検索すると、価値のある情報はないようですが、forループ2つのリストsoを検索して、次の例を見つけました.参考リンク:pythonのforループは同時に2つのlistをループしますか?
    どうして間違えたの?
    資料には参考例があります.
    for i, j in b, c:

    b,cと書くとPythonはtupleを作ると思っています
    for i, j in b, c:

    次のようになります.
    for i, j in (b, c):

    b=[1,2,3]およびc=[(10,20),(30,40),(50,60)]の場合、
    for i, j in ([1, 2, 3], [(10, 20), (30, 40), (50, 60)]):

    したがって、最初に反復されたオブジェクトは[1,2,3]であり、このlistには3つの要素が自然に2つの変数iおよびjに分解できない.
    ただし、b=[1,2]およびc=[(10,20),(30,40)]の場合、
    for i, j in ([1, 2], [(10, 20), (30, 40)]):

    最初に反復されたオブジェクトは[1,2]であり、listには2つの要素がiとjのためにunpackできるので、次の構文はスムーズに実行できます.
    >>> b = [1, 2]
    >>> c = [(10, 20), (30, 40)]
    >>> for i,j in b,c:
    ...     print i
    ...     print j
    ... 
    1
    2
    (10, 20)
    (30, 40)
    

    つまり、スムーズに反復できるのは、ちょうどいいし、あなたが望んでいる順番を合理的に取り出すとは限らない!
    2つのリストのforループをどのように処理すればいいのでしょうか.
    2つのリストを平行に反復するにはzipまたはzipが必要ですlongestはい、zip関数を試してみます.
    >>> b = [1,2]
    >>> c = [(10,20),(30,40)]
    >>> for i,j in zip(b,c):
    ...     print i
    ...     print j
    ... 
    1
    (10, 20)
    2
    (30, 40)
    
        >>> b = [1,2]
    >>> c = [(10,20),(30,40)]
    >>> for i,j in zip(b,c):
    ...     print i
    ...     print j
    ... 
    1
    (10, 20)
    2
    (30, 40)

    これが1つずつリストごとに順番に取り出していく~OKということがわかりますが、基本的にはこうなります