4 回答
TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
這是一個(gè)可能的解決方案:
def totalcost(ar):
return -1 if ar[-1] == -1 else sum(x for x in ar if x != -1)
如果您不想要使用列表理解的單行解決方案,您可以執(zhí)行以下操作:
def totalcost(ar):
if ar[-1] == -1:
return -1
s = 0
for x in ar:
if x != -1:
s += x
return s
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以使用一些簡(jiǎn)單的功能來(lái)改善您的生活:
sum(filter(lambda?x:?x?!=?-1,?ls))
sum- 在不使用 for 循環(huán)的情況下對(duì) iterable 求和filter- 從 iterable 中過(guò)濾掉不需要的元素。在這種情況下,我使用ls簡(jiǎn)單的lambda x: x != -1.
當(dāng)然,這應(yīng)該在您的初始條件之后使用,如下所示:
if?ls[-1]?==?-1: ????return?-1 ????return?sum(filter(lambda?x:?x?!=?-1,?ls))
TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
我認(rèn)為您可以簡(jiǎn)單地使用 filter 和 sum 以及 lambda 來(lái)實(shí)現(xiàn)。只是稍微更新了你的 totalcost 函數(shù)
import sys
def totalcost(ar):
? ? if ar[-1] == -1:
? ? ? ? return -1
? ? else:
? ? ? ? ar_filtered = filter(lambda x: x > 0, ar)
? ? ? ? return sum(ar_filtered)
if __name__ == '__main__':
? ? ar_city = [1, 2, 3, 4, 5]
? ? assert totalcost(ar_city) == 15
? ? ar_city = [1, 2, 3, 4, -1]
? ? assert totalcost(ar_city) == -1
? ? ar_city = [1, 2, -1, 4, 5]
? ? assert totalcost(ar_city) == 12
TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
以下是你犯過(guò)的錯(cuò)誤:
ar[elem]沒(méi)有ar正確迭代每個(gè)元素。您在 for-in 循環(huán)中返回
summ,因此它只會(huì)返回第一個(gè)元素的值。
這是一個(gè)根據(jù)您的代碼修改的工作示例。
def totalcost(ar):
if ar[-1] == -1:
return -1
summ = 0
for elem in ar:
if(elem != -1):
summ += elem
return summ
添加回答
舉報(bào)
