1

ヘッダー行のある、(CSV からインポートされた) リストの大きなリストがあります。ヘッダーを含む最初の 3 行は次のようになります。各行にはさらに多くの要素がありますが、読みやすくするために省略しています。

[('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'), 
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0')... ]

これは、私が Excel で持っていた/持っていた趣味のサッカー統計パッケージ用であり、Web ベースにしたかったので、Python を学んだときに実際に取り組む必要がありました。計算したい平均がいくつかあるので、各行でホームチームを照合し、選択した列の値を現在の合計に追加して、平均を算出できるようにします。非常に簡単に言えば、ホーム チームが「チェルシー」と対戦するたびに、それをランニング トータルに追加して、ホームで得点した平均ゴール数を計算したいとします。データ ファイルは非常に一貫性があるため、特定の変数は常に 4 列目か 5 列目などにあることがわかっています。

def CalcAverageHome(team, column, data_file):
    total = 0
    count = 0
    for team in data:
        if  data[2] == team:
            print data_file[4]
        #total += data[4]
        count += 1
    else:
       pass
    average = total / 5
    return 
print "Here's the Average"
print CalcAverageHome("Chelsea", 4, data)

そのコードを実行すると、4 番目のリスト (最上位のリスト) が表示されます。

('E0', '18/08/12', 'QPR', 'Swansea', '0', '5'...

私は使用しようとし始めましitertoolsたが、リストを反復してデバッガーとして出力するだけでも機能しませんでした (私は、私が行っているように機能することを確認したいです)

print "Let's try this with itertools" 
def chain(*iterables):
  for it in iterables:
    print it
    for element in it:
        yield element
        print element
chain(data) 

dataCSV からのデータが読み込まれた変数、リストのリストです。

しかし、これは何も出力しません - 私はそれに関する標準ドキュメントを見てきましたが、それは何の光も当てていません。各サブリストを反復処理し、チームが一致するかどうかを確認し、一致する場合は、いくつかの要素に沿って数を処理できるようにしたいだけです。これとさまざまなソリューションを約 1 日 (3 日以上) 見てきたので、少しイライラしています。

4

1 に答える 1

0

ネストされたリストを反復処理するだけでよいと思います。また、サンプル コードに間違った変数がありました。これはうまくいくと思います

data_file = [('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'),
('E0', '18/08/12', 'Arsenal', 'Sunderland', '4', '0'),
('E0', '18/08/12', 'Arsenal', 'Sunderland', '2', '0'),
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0') ]

def CalcAverageHome(team, column, data_file):
    total = 0
    n=0         # the number of times the team you are looking for is in the data
    for row in data_file:
        if  row[2] == team:
            total += int(row[column])
            n+=1
    try:
        average = float(total) / n  # if u r using python 2.7.Else if 3.2+  just total/n
    except ZeroDivisionError:       # to prevent zerodevisionerror if t team had n games
        average = 'Not played'
    return average

問題は

  • 計算関数のパラメーターでもある data_file の反復にteamを使用したため、for ループ内で使用した if チェックでは、関数に入力したチームではなく、行のチェックを行いました。 forループで繰り返したデータ
于 2013-06-08T11:59:00.170 に答える