在python列表中成对求和值

时间:2014-02-05 01:46:23

标签: python list for-loop

说我有一个清单:

alist = [1, 3, -5, 4, 2, -1]

如何通过添加下一个值来更改列表中的每个值?因此,例如,第一个值变为4,第二个值变为-2,等等......

我正在考虑使用for number in alist: number = number + # what next?

我该怎么做?

5 个答案:

答案 0 :(得分:5)

首先,你拥有的是tuple,而不是列表。元组是不可变的,这意味着你不能重新分配它们的元素

这是一种创建新列表的方法,无需更改原始列表:

>>> alist
[1, 3, -5, 4, 2, -1]
>>> [i+j for i,j in zip(alist, alist[1:])]
[4, -2, -1, 6, 1]

请注意,最终只减少一个元素,因为列表中的最后一个元素不被视为

这是一种方法,通过改变原始方法(没有创建新列表):

for i in range(len(alist)-1):
    alist[i] += alist[i+1]

请注意,列表中的最后一个元素不受影响。

答案 1 :(得分:0)

这将删除最后一个元素,因为最后一个元素没有“next”:

>>> alist = (1, 3, -5, 4, 2, -1)
>>> newlist = [a + b for a, b in zip(alist, alist[1:])]
>>> newlist
[4, -2, -1, 6, 1]

或者,zip_longest(python 2中的izip_longest)将保留它:

import itertools
>>> newlist = [a + b for a, b in itertools.zip_longest(alist, alist[1:], fillvalue=0)]
>>> newlist
[4, -2, -1, 6, 1, -1]

答案 2 :(得分:0)

直截了当的方式:

[alist[i] + alist[i+1] for i in range(len(alist)-1)]

答案 3 :(得分:0)

对于地图和lambdas的粉丝:

map(lambda x: sum(x), zip(alist, alist[1:]))

或只是

map(sum, zip(alist, alist[1:]))

答案 4 :(得分:0)

from itertools import tee, izip

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

alist = [1, 3, -5, 4, 2, -1]
new_alist = [a+b for a,b in pairwise(alist)]        # => [4, -2, -1, 6, 1]