0

1 つの要素の名前に変更があると、リストを反復処理して列を合計する方法はありますか。

[['a','1'],['a','2'],['a','3']....on and on, ['b','1'],['b','2'],['b','3']...
on and on....]]

したがって、[0] に 'a' がある間に、インデックス 1 の列を合計し、[0] が変化した場合 (つまり、'b')、再び合計を開始します。だから私はそれが一種のwhileループである可能性があると思いますが、それを理解することはできません. 私は(しかし明らかに間違っている)の線に沿って考えていました...

    for row in list:
        for i in row:  #iterate through each row
            var = i[0] #assign first index to 'var'
            while True: #while var is one name
                for num in lst:
                    sum(float(num[1]) for num in lst if num[1])   #add column [1]
            ....then something else...

いくつかのこと-要素名(「a」、「b」..)は変更されるため、指定したくありません。要素タイプの数も変更される場合があります-「a」、「b」だけの場合もあれば、「c」、「d」、「e」などの場合もあります。最初の要素が変更されるたびに、合計値を何らかの方法で保存する必要があります

これは、辞書やモジュールなどを使用せずに可能ですか?

4

3 に答える 3

2

アイテムをグループ化するために使用itertools.groupby()します:

from itertools import groupby
from operator import itemgetter

sums = [(key, sum(float(i[1]) for i in group))
        for key, group in groupby(row, key=itemgetter(0))]

('a', 10.0)これにより、 などの値のリストが生成されます。

groupby()ツールは入力シーケンスをグループに分割します。次のグループは呼び出し可能オブジェクトによって決定されますkeykeycallableによって返される値が変更されると、新しいグループが生成されます。

于 2013-05-29T23:35:59.497 に答える
1

この場合、物を追加しているので、カウンターを使用できます

>>> from collections import Counter
>>> L = [['a', '1'], ['a', '2'], ['a', '3'], ['b', '1'], ['b', '2'], ['b', '3']]
>>> c = Counter()
>>> for i,j in L:
...  c.update({i: float(j)})
... 
>>> c
Counter({'a': 6.0, 'b': 6.0})
于 2013-05-29T23:41:41.497 に答える
1

itertools.groupby()これは、 1 つの iterable から要素をグループ化できるの完璧な使用例です。次のようになります。

from itertools import groupby
from operator import itemgetter
data = [['a','1'],['a','2'],['a','3'], ['b','1'],['b','2'],['b','3'],['b','4']]
sums = [(k, sum(float(v) for k, v in g)) for k, g in groupby(data, key=itemgetter(0))]

結果:

>>> sums
[('a', 6.0), ('b', 10.0)]
于 2013-05-29T23:37:00.677 に答える