次の例のようなリスト内の要素を合計できるコードを作成しようとしています。
list[(a,b,1),(c,d,2),(e,f,3)]
私がやりたいことは、このリスト内の数字を合計することです。そのような種類のリストの名前は何ですか?
あなたが私を助けてくれることを願っています。
リストが与えられ、例に示されているように整数を合計する必要があると仮定します
foo = [('a','b',1),('c','d',2),('e','f',3)]
次のことができます
sum(e for e in itertools.chain(*foo) if isinstance(e, int))
例のように、数値要素が定義されたインデックスにある場合、次のことができます
>>> zip(*foo)
[('a', 'c', 'e'), ('b', 'd', 'f'), (1, 2, 3)]
>>> sum(zip(*foo)[2])
6
これを試して
これはタプルのリストです。リストの個々の要素を繰り返し処理して値を抽出する必要があり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
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
ん。関数が自動的に反復します。追加のモジュールをインポートする必要もありません。
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))
my_list = [('a','b',1),('c','d',2),('e','f',3)]
my_answer = sum(z for x,y,z in my_list)
素晴らしく簡潔で、将来のあなたにとって非常に読みやすい. ここで何が起こっているのか疑問の余地はありません。