我正在学习 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
它仅在列表中运行一次,但不像以前的解决方案那样简洁明了。
那么:在这种情况下,有没有办法两者兼得?第一个版本的清晰度,但第二个版本的单曲贯穿?