2

整数のみを含むリストのリストを合計する Python のメソッドを探しています。メソッドsum()はリストに対してのみ機能し、リストのリストに対しては機能しないことがわかりました。私に合うものはありますか?

ありがとうございました

4

6 に答える 6

9

sum()ここでジェネレーター式を使用できます。

In [18]: lis = [[1, 2], [3, 4], [5, 6]]

In [19]: sum(sum(x) for x in lis)
Out[19]: 21

また:

In [21]: sum(sum(lis, []))
Out[21]: 21

timeit比較:

In [49]: %timeit sum(sum(x) for x in lis)
100000 loops, best of 3: 2.56 us per loop

In [50]: %timeit sum(map(sum, lis))
100000 loops, best of 3: 2.39 us per loop

In [51]: %timeit sum(sum(lis, []))
1000000 loops, best of 3: 2.21 us per loop

In [52]: %timeit sum(chain.from_iterable(lis))       # winner 
100000 loops, best of 3: 1.43 us per loop

In [53]: %timeit sum(chain(*lis))
100000 loops, best of 3: 1.55 us per loop
于 2012-11-11T19:44:31.557 に答える
5
import itertools

sum(itertools.chain.from_iterable([[1,2],[3,4],[5,6]]))

itertools.chainiterable の 1 レベルを平坦化します (ここで必要なのはこれだけです)。そのためsum、サブリストが分割されたリストが取得されます。

于 2012-11-11T19:46:18.663 に答える
2

sum(map(sum, my_list))

これは、最初のリストのすべての要素に対して sum を実行し、それらの結果を再び sum に入れます。

于 2012-11-11T19:44:40.210 に答える
1
l = [[1,2,3], [3,4,5], [3,5,6]]
total = sum([sum(x) for x in l])
于 2012-11-11T19:44:52.997 に答える
0
import re
#print sum( [ ****** *** * in **********('[0-9]+',**************************.read()) ] )

name = raw_input("Enter file:")
if len(name) < 1 : name = "sam.txt"
handle = open(name)
#handle = handle.read()
num = list()
total = 0
for line in handle:
    line = line.rstrip()
    if len(re.findall('([0-9]+)', line))== 0: continue
    num.append(re.findall('([0-9]+)', line))



print sum(sum(num,[]))
于 2016-05-05T16:02:54.157 に答える