您好,我想問一下如何遍歷每個元素并每次遞增一個這是我想要的首先我想求和 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
uj5u.com熱心網友回復:
請注意,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 回圈,
def my_sum(ls):
result = 0
i = 0
while i < len(ls):
result = ls[i]
i = 1
return result
當您不確定如何使用 Python 的內置函式時,最好查閱 Python 檔案。
如果您想反轉所有專案的累積總和,您可以查看 中的accumulate
函式itertools
。
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),在這種情況下時間復雜度并不重要。
uj5u.com熱心網友回復:
對于您在 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]))
uj5u.com熱心網友回復:
該測驗也將檢查執行時間。所以你需要快速。
天真的方法
您可以使用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]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/480959.html