如何遍历列表中的每个元素并递增 1

how to loop through each element in list and increment by one

你好我想问一下如何遍历每个元素并每次递增一个这是我首先想要的我想对 0 , 1, 3 ,6 , 10 求和然后求和有人可以帮助我吗我不知道如何判断它是循环遍历每个元素还是 iterate.It 应该看起来像这样 examples.I 抱歉!

ls = [0, 1, 3, 6, 10]

ls = [1, 3, 6, 10]

ls = [3, 6, 10]

ls = [6, 10]

ls = [10]

ls = []

这是我想解决的问题: https://www.codewars.com/kata/5ce399e0047a45001c853c2b/train/python

我试过了,但没用

 def parts_sums(ls):
    length_list = len(ls)
    for i in range(0,length_list+1):
        return length_list
    

请注意 Python 中有一个 built-in 函数 sum() 可以完成这项工作,这可能比您在 Python 中编写的任何代码都要好。

sum([0, 1, 3, 6, 10])

但是,如果您想通过遍历列表并对所有元素求和来练习编写 sum 函数,这就是您的做法。

def my_sum(ls):
    result = 0
    for i in range(len(ls)):
        result += ls[i]
    return result

首先,您需要初始化一个变量来保存您的结果。 range() 函数生成从 0 到 x 的所有值。 for-loop 将范围函数生成的所有值按顺序分配给 i 并执行下面的缩进块。 += 赋值将 left-hand 侧变量递增 right-hand 侧表达式值。最后,我们 return 结果。

如果您更喜欢使用 while-loop,

def my_sum(ls):
    result = 0
    i = 0
    while i < len(ls):
        result += ls[i]
        i += 1
    return result

当您不确定如何使用其 built-in 功能时,查阅 Python 文档总是好的。

如果你想把所有项的累加和倒过来,可以看看itertools中的accumulate函数。

from itertools import accumulate
def parts_sums(ls):
    return list(accumulate(ls[::-1]))[::-1] + [0]

或者如果你想用循环实现,

def parts_sums(ls):
    result = []
    part_sum = 0
    for item in ls[::-1]:
        result.append(part_sum)
        part_sum += item
    result.append(part_sum)
    
    return result[::-1]

或者如果您想在不颠倒列表的情况下执行此操作(比如您是否想产生结果)

def parts_sums(ls):
    result = []
    part_sum = sum(ls)
    for item in ls:
        result.append(part_sum)
        part_sum -= item
    result.append(part_sum)
    
    return result

注意算法仍然是 O(n),在这种情况下时间复杂度并不重要。

你在codewars中提到的问题,你需要循环2次,并不断减少内循环中的第一个元素求和

def parts_sums(ls):
    # your code
    sum = []
    for i in range(len(ls)):
        sum_temp =0
        for j in range(i,len(ls)):
            sum_temp += ls[j]
        sum.append(sum_temp)
    sum.append(0)   # for the final empty list
    return sum
print(parts_sums([0, 1, 3, 6, 10]))

这个测试也会检查执行时间。所以你需要快点。

天真的方法

您可以使用 sum 或创建您自己的 sum

def parts_sums(ls):
    return [
        sum(ls[i:])
        for i in range(len(ls) + 1)
    ]

但我的意思是您需要在列表中循环两次。所以会比较慢。

偷偷摸摸的方法

在像 [a, b, c, d, e] 这样的列表中,您正在计算:

[a+b+c+d+e, a+b+c+d, a+b+c, a+b, a, 0]。因此,让我们从最后一个元素开始。 [0, a, a+b, a+b+c, a+b+c+d, a+b+c+d+e]。现在我们看到一个累积迭代: 所以在列表中获取循环,获取元素,将其与结果列表的最后一个元素 ([0]) 相加,并将其作为最后一个元素添加到结果列表中。最后反转结果

def parts_sums(ls):
    res = [0]
    for i in range(len(ls)-1, -1, -1):
        res.append(res[-1] + ls[i])
        
    return res[::-1]