Я изучаю 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
Которая проходит через список только один раз, но не является кратким и понятным, как предыдущее решение.
Итак: есть ли способ, в таких случаях, иметь оба? Ясность первой версии, но единственная пробегает вторую?