4 回答
TA贡献1788条经验 获得超4个赞
这是一个可能的解决方案:
def totalcost(ar):
return -1 if ar[-1] == -1 else sum(x for x in ar if x != -1)
如果您不想要使用列表理解的单行解决方案,您可以执行以下操作:
def totalcost(ar):
if ar[-1] == -1:
return -1
s = 0
for x in ar:
if x != -1:
s += x
return s
TA贡献1784条经验 获得超9个赞
您可以使用一些简单的功能来改善您的生活:
sum(filter(lambda x: x != -1, ls))
sum
- 在不使用 for 循环的情况下对 iterable 求和filter
- 从 iterable 中过滤掉不需要的元素。在这种情况下,我使用ls
简单的lambda x: x != -1
.
当然,这应该在您的初始条件之后使用,如下所示:
if ls[-1] == -1: return -1 return sum(filter(lambda x: x != -1, ls))
TA贡献1155条经验 获得超0个赞
我认为您可以简单地使用 filter 和 sum 以及 lambda 来实现。只是稍微更新了你的 totalcost 函数
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贡献1871条经验 获得超8个赞
以下是你犯过的错误:
ar[elem]
没有ar
正确迭代每个元素。您在 for-in 循环中返回
summ
,因此它只会返回第一个元素的值。
这是一个根据您的代码修改的工作示例。
def totalcost(ar):
if ar[-1] == -1:
return -1
summ = 0
for elem in ar:
if(elem != -1):
summ += elem
return summ
添加回答
举报