给一个数字列表... 每两个数字相加 (例如:1,2,3,4 -> 3,7)?

2024-09-29 23:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我目前所拥有的。。。我怎么能不让我的countone从名单上消失然后让程序崩溃?或者有更干净的方法吗?另外,我应该使用range还是只在列表1中为I使用?还有没有一种方法可以将i设置为java中那样的初始值?编辑:忘了说我在为面试练习。。。可能应该避免使用内置函数。。。或者这可以接受吗?在

list1 = [1,2,3,4,5,6,7,8,9,10]
list3 = []
countone = 0

for i in range(0, len(list1)-1):
    firstnum = list1[i+countone]
    secondnum = list1[i+countone+1]
    print firstnum, "+", secondnum
    sumnum = firstnum + secondnum
    list3.append(sumnum)
    countone += 1

print list3

Tags: 方法程序编辑列表rangejavaprint消失
3条回答

如果可以使用内置函数,则可以执行以下操作:

list(map(sum, zip(a[::2], a[1::2])))

否则将代码更改为

^{pr2}$

您不需要变量counton。在

您可以使用iterzip

list1 = [1,2,3,4,5,6,7,8,9,10]

it = iter(list1)

print([a + b for a,b in zip(it,it)])
[3, 7, 11, 15, 19]

iter创建了一个迭代器,一旦您从迭代器中消费了一个元素,t就消失了,您将得到下一个元素:

^{pr2}$

所以zip(it,it)基本上是调用next(it),next(it),直到迭代器用尽,剩下的是连续的元素对。它还避免了创建两个新的列表,如果你切片的话。在

如果需要循环,请使用起始索引为1的enumerate,并在每次第i个索引被2整除时追加并重置一个sm变量:

sm = 0
out = []
for i, ele in enumerate(list1, 1):
    sm += ele
    if i % 2 == 0:
        out.append(sm)
        sm = 0
print(out)
[3, 7, 11, 15, 19]

您可以使用切片创建两个新列表并将它们压缩在一起:

list3 = [a+b for a,b in zip(list1[::2], list1[1::2])]

相关问题 更多 >

    热门问题