按列表中的每2个元素优化sum

Geo*_*rge 0 python

我有一个清单:

mylist = [0.01, 0.09, 0.04, 0.16]
Run Code Online (Sandbox Code Playgroud)

我想每两个元素取总和,所以我的结果将是: [0.1, 0.2]

我想到了这个解决方案:

chunks = [mylist[i:i + 2] for i in range(0, len(mylist), 2)]

temp = []
for i in chunks:
    s = 0
    for j in i:
        s += j
    temp.append(s)

print(temp)
Run Code Online (Sandbox Code Playgroud)

[0.1, 0.2]

但我想知道是否有一个更好的解决方案,避免2 for循环.

Wil*_*sem 8

为什么不简单地使用sum(..)内置:

temp = [sum(mylist[i:i+2]) for i in range(0, len(mylist), 2)]
Run Code Online (Sandbox Code Playgroud)

这是一个单线,显然更像Pythonic.此外,它可能更有效,因为在这里你不会先将所有切片存储到内存中,等等,但你直接计算总和.


Yuv*_*mon 5

有些人可能认为它有点大材小用,但是一旦你开始对数字数组进行计算,numpy 就是你的朋友。它使您能够以可读且高效的方式进行此类计算。

import numpy as np
x = np.array([0.01, 0.09, 0.04, 0.16])
# reshaping the array to a 2D array, and summing over the columns
x.reshape((x.shape[0]/2,2)).sum(axis=1)
Run Code Online (Sandbox Code Playgroud)