python列表中成对求和的值

python列表中成对求和的值,python,list,for-loop,Python,List,For Loop,假设我有一个清单: alist = [1, 3, -5, 4, 2, -1] 如何通过添加下一个值来更改列表中的每个值?例如,第一个值变为4,第二个值变为-2,等等 我想在列表中用表示数字:number=number+#下一步是什么? 我该怎么做呢?首先,你拥有的是一个列表,而不是一个列表。元组是不可变的,这意味着您不能重新分配它们的元素 以下是一种创建新列表的方法,无需更改原始列表: >>> alist [1, 3, -5, 4, 2, -1] >>> [

假设我有一个清单:

alist = [1, 3, -5, 4, 2, -1]
如何通过添加下一个值来更改列表中的每个值?例如,第一个值变为4,第二个值变为-2,等等

我想在列表中用
表示数字:number=number+#下一步是什么?


我该怎么做呢?

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

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

>>> alist
[1, 3, -5, 4, 2, -1]
>>> [i+j for i,j in zip(alist, alist[1:])]
[4, -2, -1, 6, 1]
请注意,由于不考虑列表中的最后一个元素,因此最后只剩下一个元素

下面是一种方法,通过更改原始列表(不创建新列表):


请注意,列表中的最后一个元素未被触及。

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

>>> alist = (1, 3, -5, 4, 2, -1)
>>> newlist = [a + b for a, b in zip(alist, alist[1:])]
>>> newlist
[4, -2, -1, 6, 1]
或者,(在python 2中)将保留它:

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

简单的方法是:

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

对于地图和lambdas的爱好者:

map(lambda x: sum(x), zip(alist, alist[1:]))
或者干脆

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

最后一个数字怎么了?你在做一些假设。@Julio:是的。但从某种程度上说,这真的没什么帮助,因为这个问题没有被详细说明:)现在至少你更新的答案有了更多的上下文。@mhlester啊,刚刚意识到这一点-在你评论时正在编辑:)
map(sum, zip(alist, alist[1:]))
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]