如何让列表内的元素前后相加生成新的元素?
2019-07-12 本文已影响0人
藕丝空间
列表推导是一种优雅简洁,代码量少且能干大事儿的语法格式。
需求:
有这样的一个原始数据 [1, 2, 3, 4],暂且我们把这样的一个列表放到变量 data 里:
data = [1, 2, 3, 4]
现在的需求是,想通过列表推导,让元素内的数据前后相加,变成如下列表:
data1 = [1, 3, 5, 7] # 与前面的一个元素相加
data2 = [1, 3, 6, 10] # 与前面的元素累计相加
代码实现
1、用列表推导的方式
data1= data[:1] + [x+y for x,y in zip(data[1:],data[:-1])]
data1= data[:1] + [sum(data[x:x+2]) for x in range(len(data)-1)]
data1= [sum(data[x-1:x+1]) if x>0 else data[0] for x in range(0,len(data))]
data2= [sum(data[:x]) for x in range(1,len(data)+1)]
2、使用 itertools 库
虽然列表推导比较简洁优雅,代码量少,但并不意味着是高效率,所以使用 itertools 库也 不失为一个好办法。
from itertools import accumulate
data1 = [v + (data[i-1] if i > 0 else 0) for i, v in enumerate(data)]
data2 = list(accumulate(data))
print(data1)
print(data2)