5

複数のリストの特定の要素を集約 (合計) する方法のヒントを教えてください。

たとえば、似たような名前のパターンを持つ 20 個のリストがあり、それぞれが対応する世帯 (エージェント) の経時的な消費支出 (つまりインデックス) を表しています。

c_agent_0 = [10.0, 11.0, ...]
.
.
.
c_agent_19 = [8.0, 9.0, ...]

値 = インデックスの合計のようなものが必要ですc_agent_*[whatever]

4

3 に答える 3

7

zipを使用してリストを単一のリストに「結合」し、各インデックスの要素を合計します。

c_agent_0 = [10.0, 11.0, 12.0, 13.0, 14.0]
c_agent_1 = [1.1, 12.3, 14.2, 13.2, 14.3]
c_agent_2 = [1.4, 12.1, 14.5, 13.1, 14.2]

zipped_list = zip(c_agent_0, c_agent_1, c_agent_2)

print zipped_list
print [sum(item) for item in zipped_list]

版画

[(10.0, 1.1, 1.4), (11.0, 12.3, 12.1), (12.0, 14.2, 14.5), (13.0, 13.2, 13.1), (14.0, 14.3, 14.2)]

[12.5, 35.4, 40.7, 39.3, 42.5]
于 2013-07-17T11:32:12.523 に答える
4

リストのリストを作成してから、numpy 配列を使用できます。

import numpy as np
c_agent_0 = [10.0, 11.0, 12.0]
c_agent_1 = [13.0, 14.0, 15.0]
c_agent_2 = [16.0, 17.0, 18.0]
mylist = [c_agent_0, c_agent_1, c_agent_2]
mylist = sum(map(np.array, mylist))
print mylist[0]

リスト内包表記の方がおそらく高速であることに注意してください。これはnumpyを使用した単なるソリューションです:)。

于 2013-07-17T11:30:11.870 に答える
2

すべての列に対してこれを行いたい場合は、 alecxe の答えが最適です。単一の列 (またはサブセット) のみが必要な場合は、多くの不要な処理を行うため、少し無駄です。

1 つの列 (この場合は 3 番目) の場合:

sum([c_agent[2] for c_agent in c_agents])

組み込みを使用sum()して合計し、単純なリスト内包表記を使用して各リストから n 番目の項目を取得します。

私のコメントで述べたように、これは、変数の負荷ではなく、リストのリストがあることを前提としています。

c_agents = [c_agent_0, c_agent_1, ...]

データ構造を効果的に使用すると、コードが大幅に改善されます。

前述のzip()ベース ソリューションは、このデータ構造で動作するように簡単に変更することもできます。

[sum(column) for column in zip(*c_agent_s)]

ここでは、*演算子を使用して、リストを の引数としてアンパックしますzip()

于 2013-07-17T11:35:48.287 に答える