如何使用python将当前项添加到列表中的上一项

时间:2018-01-22 09:10:43

标签: python numpy

如何使用python将前一个列表项添加到当前列表项。

>>> l = [4,2,1,3]

如果我执行以下操作,我会得到累计金额

>>> new_l = np.cumsum(l)

但是我想在前面的第一个列表中添加当前列表,所需的输出应该是这样的。

>>> new_l
[4, 6, 3, 4]

8 个答案:

答案 0 :(得分:2)

如果你不想使用普通的python(你最好采用矢量化方法,在大多数情况下,numpy的性能更高),你可以使用np.roll

In[12]: np.roll(l, 1) + l
Out[12]: array([7, 6, 3, 4])

有了这个,你可以用两行简单地达到你的结果:

In [14]: new_l = np.roll(l, 1) + l
In [15]: new_l[0] = l[0]
In [16]: new_l
Out[16]: array([4, 6, 3, 4])

答案 1 :(得分:2)

如果你不介意坚持普通的python:

>>> [sum(l[max(i-1, 0):i+1]) for i in range(len(l))]
[4, 6, 3, 4]

答案 2 :(得分:1)

第一项与l中的项目相同,然后以zip格式进行迭代。

l[:1] + [i+j for i, j in zip(l, l[1:])]

答案 3 :(得分:1)

您可以使用普通的python代码实现此目的。使用zip生成连续元素并使用列表的第一个元素保持不变

>>> l = [4,2,1,3]
>>> l[:1] + [i+j for i,j in zip(l,l[1:])]
>>> [4, 6, 3, 4]

或使用maplambda

的其他人
>>> l[:1] + list(map(lambda x,y: x+y, l, l[1:]))
>>> [4, 6, 3, 4]

答案 4 :(得分:1)

有几种方法可以使用numpy执行此操作:

使用np.cumsum,减去之前的字词

l=[4,2,1,3]
c = np.cumsum(l)
c[2:] -= c[:-2]
c

Out: array([4, 6, 3, 4], dtype=int32)

使用0填充并进行广播添加:

l = [4,2,1,3]
l_ = np.r_[0, l]
l_[1:] + l_[:-1]

Out: array([4, 6, 3, 4])

或进行boradcast添加,然后使用初始值填充

l = np.array([4,2,1,3])
np.r_[l[0], l[1:] + l[:-1]]

Out: array([4, 6, 3, 4])

对于大型数据集而言,所有这些都比列表理解要快得多

答案 5 :(得分:0)

如果您不想使用numpy,那么您可以使用zip

new_list.append(old_list[0])              # append first value
for i, j in zip(old_list, old_list[1:]):  # iterate over each consecutive pair
    new_list.append(i + j)

如果您正在使用大型列表,请考虑使用

itertools.izip(old_list, old_list[1:])

答案 6 :(得分:0)

这是一行中的vanilla Python实现:

l=[4,2,1,3]
new_l = [l[i] + l[i - 1] if i > 0 else l[i] for i in range(len(l))]

答案 7 :(得分:-2)

您可以使用简单的for循环

在普通python中执行此操作
a = [4, 2, 1, 3]
b = []
for i in range(len(a)):
    if i == 0:
        b.append(a[i])
    else:
        b.append(a[i] + a[i-1])

print(b)

<强>输出

[4, 6, 3, 4]