我错在哪里?

2024-10-01 05:00:20 发布

您现在位置:Python中文网/ 问答频道 /正文

问题 写函数mssl()(最小和子列表),它将整数。它然后计算并返回输入列表的最大和子列表的和。最大和子列表是输入列表的子列表(片),其条目之和最大。空子列表定义为总和为0。例如,列表[4,-2,-8,5,-2,7,7,2,-6,5]的最大和子列表是[5,-2,7,7,2],其条目之和是19。 l=[4、-2、-8、5、-2、7、7、2、-6、5] mssl(左) 19 mssl([3,4,5]) 12 mssl([-2、-3、-5]) 0 在上一个示例中,最大和子列表是空的子列表,因为所有列表项都是空的 没有。 这是我的解决方案

 def mssl(lst):
    pos,neg,TotalList=[],[],[]
    for items in range(len(lst)):
         if(lst[items]>0):
            pos+=[lst[items]]
         else:
             neg+=[lst[items]]
    TotalPos=sum(pos)
    TotalNeg=sum(neg)

    if(len(neg)>0):
        for negatives in range(len(neg)):
         TotalList=[TotalPos+neg[negatives]]
        if(TotalList>TotalList[negatives-1]):
               print(TotalList)
    else:
        TotalList=TotalPos
    print(TotalList)

这不是一个家庭作业问题,我学习PYTHON不是为了好玩,请告诉我哪里错了


Tags: inpos列表forlenif条目items
1条回答
网友
1楼 · 发布于 2024-10-01 05:00:20

看起来您正在尝试学习编程,而python是您的第一语言。这个特别的问题一开始就有点难。我建议你先采取直截了当的暴力手段。依次计算所有子序列的和,并跟踪哪个子序列最大。一旦你有了一个能产生正确答案的函数,你就可以寻找更好的(更快,更优雅的)解决方案。你知道吗

至于你的代码,它真的与问题无关。例如,totalist总是一个单元素列表。表达式TotalList[negatives-1]没有多大意义;如果列表中只有一个元素,则可以作为TotalList[0]访问它。表达式TotalList>TotalList[negatives-1]完全没有意义;您不希望将列表与数字进行比较。你知道吗

这是一个众所周知的问题,一个简单,快速的解决方案是不容易想出的,所以不要气馁,如果你没有找到它。一旦你得到了一个简单的解决方案,你可以考虑一个优雅的。这个问题可以在python的一行代码中解决,使用列表理解。尝试这样做将导致python风格的改进。例如,代替写作

 for items in range(len(lst)):
         if(lst[items]>0):
            pos+=[lst[items]]
         else:
             neg+=[lst[items]] 

你可以,也应该写

pos = [x for x in lst if x > 0]
neg = [x for x in lst if x < 0]

祝你学习python好运。你知道吗

相关问题 更多 >