我哪里错了?

时间:2015-08-01 02:50:48

标签: 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(L) 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有趣,请让我知道我错在哪里

1 个答案:

答案 0 :(得分:0)

看起来你正在尝试学习编程,python是你的第一语言。这个特殊问题一开始有点困难。我会建议你先采取一种直截了当的蛮力方法。一个接一个地评估所有子序列的总和,并跟踪哪个是最大的。一旦你有一个能产生正确答案的功能,你就可以寻找更好的(更快,更优雅,更好)的解决方案。

至于你的代码,它实际上与这个问题无关。例如,TotalList始终是单元素列表。 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好运。