问题 写函数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有趣,请让我知道我错在哪里
答案 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好运。