如何在列表中添加n个连续元素
我之前问过一个问题,关于如何在一个列表中把两个相邻的数字相加。可是得到的答案并没有普遍适用。现在我想知道,怎么才能把列表中任意数量的相邻元素加在一起,要求这个数量是2个或更多。
if n = 3
l = [1,2,3,4,5,6] result = [6, 15]
l = [1,2,3,4,5,6,7] result = [6, 15, 7]
l = [1,2,3,4,5,6,7,8] result = [6, 15, 15]
if n = 4
l = [1,2,3,4,5,6,7] result = [10, 18]
6 个回答
3
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这个过程就像是搬家,把东西从一个房间搬到另一个房间一样。
在这个过程中,我们可能会遇到一些问题,比如数据的格式不对,或者数据不完整。这就需要我们进行一些检查和处理,确保搬过去的东西是完整的、正确的。
另外,有时候我们需要把数据进行转换,比如把数字变成字符串,或者把字符串变成日期。这就像是把一个东西的外包装换掉,但里面的东西没有变。
总之,处理数据就像是整理和搬运东西,需要仔细和耐心,确保每一步都做得对,这样才能最终得到我们想要的结果。
def add(seq, n):
return [sum(seq[i:i + n]) for i in range(0, len(seq), n)]
print(add([1, 2, 3, 4, 5, 6], 3))
print(add([1, 2, 3, 4, 5, 6, 7], 3))
print(add([1, 2, 3, 4, 5, 6, 7, 8], 3))
print(add([1, 2, 3, 4, 5, 6, 7], 4))
3
n=numConsecutiveElements
[sum(list[x:x+n]) for x in range (0,len(list),n)]
这段代码能解决问题
代码的说明
x=0 //Start at the first element
while(x<len(list)): // Until we get to the end of the list
sum(list[x] + list[x+1] + ... list[x+n-1]) //Sum n elements
x+=n //Move The first element n elements forward
1
我觉得你可以像之前那样做,只不过把输入的内容改成更通用的形式,使用izip_longest
。
import itertools as it
s = [l[n-i::n] for i in range(n)]
[sum(r) for r in it.izip_longest(*s, fillvalue=0)]
或者你也可以用一行代码来实现。
f = lambda n,l: [sum(r) for r in it.izip_longest(*[l[i::n] for i in range(n)], fillvalue=0)]
>>>f(3, range(1,7))
[6,15]
>>>f(3, range(1,8))
[6,15, 7]
>>>f(3, range(1,9))
[6,15,15]
>>>f(4, range(1,8))
[10,18]