2017-05-11 7 views
0

サッカーチームが試合に勝った回数を計算するために使用しようとしているコードを書きました。マッチはネストされたリストに置かれ、各サブリストには2つのチームの名前とゲームのスコアがそれぞれ含まれます。ネストされたリストのチームの勝利数をカウントする

L = [['Patriots', 'Giants', '3', '1'], ['Steelers', 'Patriots', '1', 2'], ['Giants', 'Steelers', '3', '5']] 

しかし、リストははるかに大きく、試合に出場したサッカーチームが多く含まれています。

私は既に、各チームの名前とプレイしたゲームの数を含む最終的なリストを持っています。これは正常に計算されました。

finalList = [['Patriots', 7], ['Giants', 3], ['Steelers', 8]] 

私は、出力は次のようになりたい:ペイトリオッツは7試合に出場し、2つの試合に勝ったので

finalList = [['Patriots', 7, 2], ['Giants', 3, 0], ['Steelers', 8, 1]] 

、ジャイアンツは3つのゲームをプレイし、ゼロゲームやスティーラーズを獲得した8試合に出場し、1を獲得しましたゲーム。

これはこれまでのところ私のコードであり、一部の一致に対して正しい結果を得られません。私のコードは

[['Giants', 5, 1, 0, 1]] 

for i in L: 
    countLeft = 0 
    countRight = 0 
    if i[2]>i[3]: 
     countLeft += 1 
    elif i[3]>i[2]: 
     countRight += 1 
     for k in finalList: 
      if i[0]==k[0]: 
       k.append(countLeft) 
      elif i[1]==k[0]: 
       k.append(countRight) 
print(finalList) 

私も自分のコード内の任意の辞書を使用することはできないのです、それはちょうどこのような1と0の数を追加してまた数を合計しません! !

答えて

1

次のことを試してみてください。

for k in finalList: 
    k.append(0) 

for i in L: 
    if int(i[2]) > int(i[3]): 
      for k in finalList: 
        if k[0] == i[0]: 
          k[2]+=1 
    elif int(i[3]) > int(i[2]): 
      for k in finalList: 
        if k[0] == i[1]: 
          k[2]+=1 

>>> finalList 
[['Patriots', 7, 2], ['Giants', 3, 0], ['Steelers', 8, 1]] 
>>> 
+0

はい!これは完全に機能しました。 'len(k)<3:'を入れた理由を尋ねることができますか? –

+0

@BillyWhales 'k [2]'を呼び出すときにIndexErrorを防ぐためです。本質的にチームが勝利しなかった場合、配列は2つのインデックス( '['Patriots'、7]')になるので、 'k [2]'はエラーを発生させます。 –

+0

どうすればチームが0試合で勝ったら0だけ追加するように編集できますか? –

1

あなたはcollectionsモジュールからCounterを使用して、この例のように、ご希望の結果を持っているlist comprehensionを使用することができます

from collections import Counter 

a = [['Patriots', 'Giants', '3', '1'], ['Steelers', 'Patriots', '1', '2'], ['Giants', 'Steelers', '3', '5']] 
b = [['Patriots', 7], ['Giants', 3], ['Steelers', 8]] 

wins = Counter(team1 if int(team1_s) > int(team2_s) else team2 if int(team2_s) > int(team1_s) else None for team1, team2, team1_s, team2_s in a) 

final = final = [[k,l,c[k]] if k in wins else [k,l,0] for k,l in b] 

print(final) 

出力:

[['Patriots', 7, 2], ['Giants', 3, 0], ['Steelers', 8, 1]] 
関連する問題