所以我正在研究演算法,但我無法弄清楚這一部分。給定一個數字串列,獲取大于 0 的連續值的總和并添加到新串列中。預期結果:
[1, 2, 3, 0, 1, 1, 1, 0, 2, 2, 2] == [6, 3, 6]
我試過了:
for i in splitlist2:
if i == 0:
resultlist.append((count2))
count2 = 0
else:
count2 = i
產生 [6, 3]。我不明白為什么最后一個值沒有出現。有人可以解釋一下嗎?
uj5u.com熱心網友回復:
def custom_sum(arr):
if not arr: return []
res = [0]
for i, el in enumerate(arr):
if el == 0:
if i != len(arr)-1:
res.append(0)
else:
res[-1] = el
return res
快速測驗:
arr = [1, 2, 3, 0, 1, 1, 1, 0, 2, 2, 2]
custom_sum(arr)
[6, 3, 6]
通用演算法:
- 如果輸入陣列為空回傳空陣列
- 否則用 0 初始化結果陣列
- 回圈輸入陣列的元素:
- 如果元素為 0,則檢查它是否是最后一個元素。如果它是輸入陣列的最后一個元素,則忽略。否則,為新磁區的結果陣列添加一個零。
- 如果元素不為零,則將其值添加到結果陣列中的最后一個值。
uj5u.com熱心網友回復:
from itertools import groupby
list1 = [1, 2, 3, 0, 1, 1, 1, 0, 2, 2, 2]
ans = []
return [sum(list(v)) for k,v in groupby(list1, key = lambda x: x != 0) if k != 0]
輸出 :
[6,3,6]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359126.html
