0

次の例のようなリスト内の要素を合計できるコードを作成しようとしています。

list[(a,b,1),(c,d,2),(e,f,3)]

私がやりたいことは、このリスト内の数字を合計することです。そのような種類のリストの名前は何ですか?

あなたが私を助けてくれることを願っています。

4

5 に答える 5

3

リストが与えられ、例に示されているように整数を合計する必要があると仮定します

foo = [('a','b',1),('c','d',2),('e','f',3)]

次のことができます

sum(e for e in itertools.chain(*foo) if isinstance(e, int))
  • ここでitertools.chainはリストを平坦化します
  • isinstanceは、要素が整数のインスタンスかどうかをチェックします
  • int のインスタンスである要素のみを合計する

例のように、数値要素が定義されたインデックスにある場合、次のことができます

>>> zip(*foo)
[('a', 'c', 'e'), ('b', 'd', 'f'), (1, 2, 3)]
>>> sum(zip(*foo)[2])
6
于 2012-12-04T07:26:52.110 に答える
3

これを試して

これはタプルのリストです。リストの個々の要素を繰り返し処理して値を抽出する必要がありsumます。

In [103]: l = [('a','b',1),('c','d',2),('e','f',3)]

In [104]: sum([x[2] for x in l])
Out[104]: 6
于 2012-12-04T07:27:17.353 に答える
0

iterableを単一の値に減らすことは、組み込みのreduce関数が作成された目的です。

In [1]: l = [("a", "b", 1), ("c", "d", 2), ("e", "f", 3)]

In [2]: reduce(lambda x,y: x + y[2], l, 0)
Out[2]: 6

したがって、明示的に反復する必要はありませreduceん。関数が自動的に反復します。追加のモジュールをインポートする必要もありません。

于 2012-12-04T09:16:57.307 に答える
0

func flatten()を使用して、次のようなネストされたリストを解析できます。lst = [('a'、'b'、(1、2))、('c'、'd'、2)、('e' 、'f'、3)]

def flatten(l):  
    for el in l:  
        if hasattr(el, "__iter__") and not isinstance(el, basestring):  
            for sub in flatten(el):  
                yield sub  
        else:  
            yield el 

print sum(e for e in flatten(lst) if isinstance(e, int))
于 2012-12-04T07:35:42.023 に答える
0
my_list = [('a','b',1),('c','d',2),('e','f',3)]

my_answer = sum(z for x,y,z in my_list)

素晴らしく簡潔で、将来のあなたにとって非常に読みやすい. ここで何が起こっているのか疑問の余地はありません。

于 2012-12-04T12:21:51.753 に答える