2016-09-15 93 views
-1

我有一个庞大的数据集&复杂的代码,它需要这么多时间,如果我试图通过附加所有中间结果并比较来找到最大值。所以我想通过比较以前的值来实现算法来找到最大值。 我的算法是这样,如何通过比较以前的值来找到最大值?

for i in range(len(y)): 
    oldmax = y[0] 
    if oldmax >= y[i]: 
    pass 
    else: 
    new_max = y[i] 

然后我要存储此newmax,并与下一个字符串值Y [i + 1]比较和继续(仅最大值应在年底生存)。 但我不知道如何将这个new_max设置为在下一个循环中进行比较。例如,令y = [3,1,5,6,4]。由于y [0]大于y [1],所以它会通过,直到它满足5.但是由于6和4也大于3,所以new_max结束为4,这是最后一个值。

我该如何修复代码?任何帮助将不胜感激!

+1

为什么你不能使用函数'max()'?这块感冒可能只是一条线:'new_max = max(y)' – TuanDT

回答

1

为什么你不使用一个变量并比较直到length - 1?此外,您在每次迭代中都会将oldmax重置为第一个元素,从而导致结果不准确。设置它的初始值,但不改变它:

max_value = y[0] 
for i in range(len(y) - 1): 
    if max_value <= y[i + 1] 
     max_value = y[i + 1] 

现在什么不只是有一个变量,max_value具有第一元素的初始值。由于访问元素i + 1,循环从第一个元素到length - 1。如果最大值小于下一个值,则将最大值重新分配给下一个值。如果没有做任何事情,我也排除了额外费用,只检查它是否更大。


您可以得到由只使用内置max函数,该函数在任何迭代并返回最大值以上摆脱的所有代码:

max_value = max(y) 
+0

感谢安德鲁它运作良好! – user4522704

0

如果你想做的事就像那样,你不需要使用index,这对于大数据可能会稍微慢一些。

你可以简单地做:

newmax = y[0] 
for new in y: 
    newmax = new if new > newmax else newmax 

你需要做一个测试对庞大的数据虽然看,如果这是不够快。

+0

条件表达式总是计算为'new'! – VPfB

+0

@VPFB谢谢!替换名字时可怕的错字... –