6

次のようなリストがあります。

[[3, 4.6575, 7.3725], 
[3, 3.91, 5.694],
[2, 3.986666666666667, 6.6433333333333335],
[1, 3.9542857142857137, 5.674285714285714],....]

最初の要素の値が等しい行のすべての値を合計したいと思います(実際には平均を取ります...しかしそれは詳細です)。これは、上記の例では、最初の 2 行が合計されることを意味します。

[[3, 8.5675, 13.0665],
[2, 3.986666666666667, 6.6433333333333335],
[1, 3.9542857142857137, 5.674285714285714],....]

これは、最初の値が一意でなければならないことを意味します。

最初の値がたとえば1に等しいすべての「行」を見つけて合計することで、これを行うことを考えました。私の質問は、最初の値が特定の値に等しいすべての行をどのように見つけることができるかです。

4

3 に答える 3

2

Python でこのようなことを行う方法はたくさんあります。リストが と呼ばれる場合a、リスト内包表記を作成して、最初の列が に等しい行インデックスを取得できますvalue

rows = [i for i in range(0,len(a)) if a[i][0]==value]

ただし、X次元の配列またはリストを解析して、あらゆる種類の統計データを取得するライブラリ全体があると確信しています。利用可能なライブラリの数が多いことは、Python での開発を素晴らしい体験にする多くの要素の 1 つです。

于 2013-07-19T08:28:35.590 に答える
1
>>> from itertools import groupby
>>> alist
[[3, 4.6575, 7.3725], [3, 3.91, 5.694], [2, 3.986666666666667, 6.6433333333333335], [1, 3.9542857142857137, 5.674285714285714]]
>>> [reduce(lambda x, y: [key, x[1]+y[1], x[2]+y[2]], group) for key, group in groupby(alist, lambda x:x[0])]
[[3, 8.567499999999999, 13.0665], [2, 3.986666666666667, 6.6433333333333335], [1, 3.9542857142857137, 5.674285714285714]]

リスト内包表記を使用して別のソリューションを提供するだけgroupbyですreduce. py3.xreduceからインポートする必要があります。functools

于 2013-07-19T08:54:58.387 に答える