2017-12-02 23 views
-1

私はリストのリストをPythonで持っており、各リストには5つの要素が含まれています。例Pythonでリストの要素を比較して一致するものを探す

lists = [['x1', 'y1', 'z1', '10', ''], 
     ['x1', 'y1', 'z1', '', '5'], 
     ['x2', 'y2', 'z2', '10', ''], 
     ['x2', 'y2', 'z2', '10', ''], 
     ['x1', 'y1', 'z1', '', '5'], 
     ['x3', 'y3', 'z3', '', '40'], 
     ['x2', 'y2', 'z2', '', '20']] 

のために私は、各リストの最初の3つの要素を比較したいとの一致がある場合は、マッチしたリストのために、私はすべての行の4番目の列を追加したいとの合計と比較します一致したリストの5番目の列。一致するリストのセットの4番目と5番目の列の合計が一致する場合は、行を出力する必要があります。

したがって、上記の例では、出力が

output = [['x1', 'y1', 'z1', '10', '10'], 
      ['x2', 'y2', 'z2', '20', '20']]   

誰かがこのためのソリューションを提供できなければなりません。

ありがとうございました

+0

残念ながら、ディスカッションフォーラムやチュートリアルサービスではありません。時間をかけて[ask]とそのページの他のリンクを読んでください。例を練習して[チュートリアル](https://docs.python.org/3/tutorial/index.html)を使って作業してください。 Pythonが提供するツールについて紹介し、問題解決のためのアイデアを得ることさえできます。 – wwii

+0

StackOverflowはこの方法では動作しません。私たちは解決策を提供することはできません。私たちはあなたの問題のエラーを解決するのに役立つだけです。 – RottenCandy

答えて

2

ワンラインソリューション!

として outputを与える
output = [l[:4] + [str(sum(int(j[4]) for j in lists if j[:3] == l[:3] and j[4]))] for l in (l for l in lists if l[3])] 

[['x1', 'y1', 'z1', '10', '10'], ['x2', 'y2', 'z2', '20', '20']] 

の代わりに、その行を説明しようと、私はそれが働いているかを適切に説明するために、より大きなfor-loopスクロールにプロセスを下に拡大しています。

output = [] 
for l in (l for l in lists if l[3]): 
    sm = 0 
    for j in lists: 
     if j[:3] == l[:3] and j[4]: 
       sm += int(j[4]) 
    sm = str(sm) 
    if sm == l[3]: 
     output.append(l[:4] + [sm]) 

か?

まあ、私たちは発電機のリストをループしています:l for l in lists if l[3]。本質的には、最初の3つの要素が同じである他のリストを合計して、これをl[3]と比較できるように、実際には3番目のインデックスに値を持つリストをループするだけです。

次に、合計変数(sm)を0と宣言し、それに他のリスト要素を追加します。

次に、最初の3つの要素が同じである可能性のあるlistsのリストをループしたいと考えています。

最初の3つの要素が同じであるかどうかをチェックして、実際に4番目の要素の合計に何かがあるかどうかを確認します(そうでなければ、空の文字列をint)。次に、このテストに合格するとj[4]smに追加し、次のリストに進みます。

次に、最終的に必要なデータ型であるため、合計(sm)を文字列に変換し、l[3]を整数に変換して保存します。

最後に、この文字列を元のリストの4番目の要素と比較します。同じ場合は、元のリストと合計(リスト連結を使用)をoutputリストに追加します。

+0

ありがとうジョー。しかし、ここでは1つのケースが見逃されています。私はリスト[]を編集しました。私は4行目の要素を合計し、5行目の要素の合計と比較する必要があります。上記の解決策は、4行目の要素を追加しません。それをソリューションに追加してください。ありがとう –

関連する問題