说我有一个清单:
alist = [1, 3, -5, 4, 2, -1]
如何通过添加下一个值来更改列表中的每个值?因此,例如,第一个值变为4,第二个值变为-2,等等......
我正在考虑使用for number in alist: number = number + # what next?
。
我该怎么做?
答案 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]