如何遍历list中的每个元素并自增1



你好,我想问如何循环遍历每个元素并每次递增一个,这就是我想要的,首先,我想要求和0,1,3,6,10,在求和之后,有人可以帮助我,我不知道如何判断它是循环遍历每个元素还是迭代。它应该看起来像这些例子。对不起!

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中有一个内置函数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循环将range函数生成的所有值按顺序赋给i,并执行下面缩进的代码块。+=赋值使左侧变量增加右侧表达式值。最后,返回结果。

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

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

当你不确定如何使用Python的内置函数时,最好查阅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中提到的问题,您需要将其循环两次,并不断减少内循环中的第一个元素以进行sum。

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]

最新更新