Python 列表列表的总和

Python 列表列表的总和,python,list,methods,Python,List,Methods,我正在寻找python中的方法来对只包含整数的列表求和。 我看到方法sum()只适用于list,而不适用于list的list。 有适合我的吗 谢谢您可以在此处使用带有生成器表达式的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]: %ti

我正在寻找python中的方法来对只包含整数的列表求和。 我看到方法
sum()
只适用于list,而不适用于list的list。 有适合我的吗

谢谢

您可以在此处使用带有生成器表达式的
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
sum(映射(sum,我的列表))

这将对第一个列表的每个元素运行sum,然后将这些元素的结果再次放入sum中

l = [[1,2,3], [3,4,5], [3,5,6]]
total = sum([sum(x) for x in l])
itertools.chain
将iterable的一个级别展平(这是您在这里所需要的全部),因此
sum
将获取包含子列表的列表。

导入re
#打印总和([************在*********(“[0-9]+”,******************************.read())]))
名称=原始输入(“输入文件:”)
如果len(name)<1:name=“sam.txt”
句柄=打开(名称)
#handle=handle.read()
num=list()
总数=0
对于线输入句柄:
line=line.rstrip()
如果len(关于findall(“([0-9]+)”,第行))==0:继续
num.append(关于findall(“([0-9]+)”,第行))
打印总和(总和(num,[]))

示例文件源:

作为一种解释,这是通过使用一个公式对每个列表的总和进行求和来实现的。请注意,可读性应始终优于性能,除非它是一个经验证的瓶颈。还请注意,第二个版本的工作原理是将列表连接在一起以将其展平,然后对展平的列表进行求和。虽然这在CPython中可能很快,但不能保证这种整平列表的方法在其他实现中是有效的,因此
itertools.chain.from_iterable()
将被认为是更可取的(并且是用于此用途)。@Lattyware
itertools.chain.from_iterable()
也是其中最快的一种,在我做了一些编辑之后。作为一种解释,这是通过将列表展平,然后将包含的所有值的新iterable相加来实现的。
import itertools

sum(itertools.chain.from_iterable([[1,2],[3,4],[5,6]]))
import re
print sum( [int(i) for i in re.findall('[0-9]+', open("regex_sum_301799.txt").read()) ] )