为了账号安全,请及时绑定邮箱和手机立即绑定

计算列表的总和并删除 -1 值

计算列表的总和并删除 -1 值

largeQ 2023-05-09 10:08:47
我想编写一个 python 程序,如果最后一个元素是 -1 打印 -1,则给定一个用户输入列表,然后如果列表中的任何元素包含不应该计数的 -1 和剩余的数组总和。例如:1) list=[1,2,3,4,5] ans should be 15 2) list=[1,2,3,4,-1] ans should be -13) list=[1,2,-1,4,5] ans should be 12 ignoring "-1"我尝试了 2 种解决方案,但都没有用。import sysdef totalcost(ar):  if ar[-1]==-1:    return -1  else:    summ=0    for elem in ar:        if(ar[elem]==-1):            ar.remove(elem)            summ=summ+elem        else:                    summ=summ+elem              return summif __name__=='__main__':  ar_city=input()  ar=list(map(int,input().strip().split()))  result=totalcost(ar)  print(result)  import sysdef totalcost(ar):  if ar[-1]==-1:    return -1  else:    summ=0    for elem in ar:        if(ar[elem]<0):            ar_new=ar.remove(elem)            for i in ar_new:                summ=summ+i        else:                    summ=summ+elem              return summif __name__=='__main__':  ar_city=input()  ar=list(map(int,input().strip().split()))  result=totalcost(ar)  print(result)  
查看完整描述

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


查看完整回答
反对 回复 2023-05-09
?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以使用一些简单的功能来改善您的生活:

sum(filter(lambda x: x != -1, ls))
  1. sum- 在不使用 for 循环的情况下对 iterable 求和

  2. filter- 从 iterable 中过滤掉不需要的元素。在这种情况下,我使用ls简单的lambda x: x != -1.

当然,这应该在您的初始条件之后使用,如下所示:

if ls[-1] == -1:
    return -1
    return sum(filter(lambda x: x != -1, ls))
查看完整回答
反对 回复 2023-05-09
?
白衣非少年

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


查看完整回答
反对 回复 2023-05-09
?
ITMISS

TA贡献1871条经验 获得超8个赞

以下是你犯过的错误:

  1. ar[elem]没有ar正确迭代每个元素。

  2. 您在 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


查看完整回答
反对 回复 2023-05-09
  • 4 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信