如何对给定列表中的前k个项目求和?
例如:
myList = [1,2,5]
如何使用k为k = 1返回 1 ,为k = 2 返回 3,为k = 3 返回8 ?
您有两个选择,都使用sum()
:
用于itertools.islice()
有效地提取这些元素:
from itertools import islice
sum(islice(somelist, k))
切片列表以获取仅包含这些第一个元素的副本:
sum(somelist[:k])
islice()
内存效率更高,可以与切片竞争:
>>> import timeit
>>> somelist = list(range(10000))
>>> k = 1
>>> timeit.timeit('sum(somelist[:k])', 'from __main__ import somelist, k')
0.23189388398895971
>>> timeit.timeit('sum(islice(somelist, k))', 'from __main__ import somelist, k; from itertools import islice')
0.2557754369918257
>>> k = len(somelist) // 2
>>> timeit.timeit('sum(somelist[:k])', 'from __main__ import somelist, k')
51.454719836998265
>>> timeit.timeit('sum(islice(somelist, k))', 'from __main__ import somelist, k; from itertools import islice')
53.374267254024744
即使对于大k
的 ,islice()
版本与切片在同一个范围内,但我们不必先创建另一个带有k
引用的列表对象。