2017-07-05 2 views
1

私は最も効率的な方法で解決しようとしているかなり単純な問題です。PythonでAPIによって出力されたタプル値を合計する方法

一連の名前付きタプルを出力するAPIにクエリを実行しています。出力された各タプルの値を累積して合計します。私は、次のようなものをやっている

すなわち:

for time_series in api_query: 
    for ts_tuple in time_series.header: 
     print(ts_tuple) 

出力のようなものだろう:私は、各namedtupleで値を取得し、合計を合計する必要が

Point(end_time='2017-07-05T12:12:24.471Z', start_time='2017-07-05T12:11:24.471Z', value=0) 
Point(end_time='2017-07-05T12:13:24.471Z', start_time='2017-07-05T12:12:24.471Z', value=48) 
Point(end_time='2017-07-05T12:14:24.471Z', start_time='2017-07-05T12:13:24.471Z', value=11) 
Point(end_time='2017-07-05T12:15:24.471Z', start_time='2017-07-05T12:14:24.471Z', value=0) 
Point(end_time='2017-07-05T11:52:24.471Z', start_time='2017-07-05T11:51:24.471Z', value=0) 

を。

私は何を持っていることは次のとおりです。

total_foo = [] 

    for time_series in api_query: 
     for ts_tuple in time_series.header: 
      total_foo.append(ts_tuple.value) 

は、ちょうどtotal_fooに合計を呼び出します。

誰かがもっとピジョンの方法を提案できるかどうか疑問に思っていましたか?私は、forループを使用してリストに常に追加することから離れようとしています。

NB:一部のバックグラウンドでは、APIはgoogle-cloud-pythonライブラリを介してStackdriverメトリックを照会しています。

答えて

2

あなたはこのように、ネストされたループとジェネレータ式を使用することがあります。

total = sum(ts_tuple.value for time_series in api_query for ts_tuple in time_series.header) 
+0

私は合計= NPを使用します。配列([time_series.headerのts_tupleのためのapi_queryのtime_seriesのためのts_tuple.value])sum()はnumpy sumが速いかもしれないので、ジェネレータはndarrayに解説を変換してから実行する方が良いでしょう。 –

+1

@AndoJuraiええと、numpyはタグ付けされていません...それをよく保ちます。 :) –

0

あなたはまた、合計を行うには、あなたの元のループを変更することができます。

total_foo = 0 
for time_series in api_query: 
    for ts_tuple in time_series.header: 
     print(ts_tuple) 
     total_foo += int(ts_tuple.value) 
関連する問題