我正在学习Python,处理列表的简单方法被认为是一种优势。有时候确实如此,但看看这个例子:
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> numbers.remove(max(numbers))
>>> max(numbers)
74
从一个列表中获取第二大的数字有一个非常简单、快速的方法。除了简单的列表处理之外,它还可以编写一个程序两次运行列表,找到最大值和第二大值。这种方法也是破坏性的-如果我想保留原始数据,就需要两份副本。我们需要:
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> if numbers[0]>numbers[1]):
... m, m2 = numbers[0], numbers[1]
... else:
... m, m2 = numbers[1], numbers[0]
...
>>> for x in numbers[2:]:
... if x>m2:
... if x>m:
... m2, m = m, x
... else:
... m2 = x
...
>>> m2
74
有一种方法可以同时拥有第一个版本的清晰度和第二个版本的单次运行吗?但并非像前一个解决方案那样简洁明了。
O(N)
)是最好的,因为对于大型列表而言,仅仅因为代码短小就使用一行代码并不是一个好主意。 - Ashwini Chaudharym2
将只是最大的。我认为它也没有在m2<x<m
时替换m2
。 - Volatilityblist.sortedlist
而不是列表)。 - abarnert