我正在寻找python中的方法来汇总只包含整数的列表。
我看到方法sum()
仅适用于列表但不适用于列表列表。
有什么适合我吗?
谢谢
答案 0 :(得分:7)
您可以在此处使用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
答案 1 :(得分:4)
import itertools
sum(itertools.chain.from_iterable([[1,2],[3,4],[5,6]]))
itertools.chain
展平了一个可迭代级别(这就是你需要的所有内容),因此sum
会获得列出子列表的列表。
答案 2 :(得分:2)
sum(map(sum, my_list))
这会在第一个列表的每个元素上运行总和,然后再将这些结果放入总和中。
答案 3 :(得分:1)
l = [[1,2,3], [3,4,5], [3,5,6]]
total = sum([sum(x) for x in l])
答案 4 :(得分: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,[]))
答案 5 :(得分:0)
import re
print sum( [int(i) for i in re.findall('[0-9]+', open("regex_sum_301799.txt").read()) ] )