Метод sort() позволяет относительно легко отсортировать список. Предположим, имеется список машин, и вы хотите переупорядочить эти элементы по алфавиту. Чтобы упростить задачу, предположим, что все значения в списке состоят из символов нижнего регистра.
cars.py
cars = ['bmw', 'audi', 'toyota', 'subaru']
(1) cars.sort()
print(cars)
Метод sort() в точке (1) осуществляет постоянное изменение порядка элементов в списке. Названия машин располагаются в алфавитном порядке, и вернуться к исходному порядку уже не удастся:
['audi', 'bmw', 'subaru', 'toyota']
Список также можно отсортировать в обратном алфавитном порядке; для этого методу sort() следует передать аргумент reverse=True. В следующем примере список сортируется в порядке, обратном алфавитному:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
И снова порядок элементов изменяется на постоянной основе:
['toyota', 'subaru', 'bmw', 'audi']
Временная сортировка списка функцией sorted()
Чтобы сохранить исходный порядок элементов списка, но временно представить их в отсортированном порядке, можно воспользоваться функцией sorted(). Функция sorted() позволяет представить список в определенном порядке, но не изменяет фактического порядка элементов в списке.
Попробуем применить эту функцию к списку машин.
cars = ['bmw', 'audi', 'toyota', 'subaru']
(1) print("Here is the original list:")
print(cars)
(2)print("\nHere is the sorted list:")
print(sorted(cars))
(3)print("\nHere is the original list again:")
print(cars)
Сначала список выводится в исходном порядке (1) , а затем в алфавитном (2). После того как список будет выведен в новом порядке, в точке (3), мы убеждаемся в том, что список все еще хранится в исходном порядке.
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']
Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']
(1) Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']
Обратите внимание: после вызова функции sorted() список продолжает храниться в исходном порядке (1) . Функции sorted() также можно передать аргумент reverse=True, чтобы список был представлен в порядке, обратном алфавитному.
примечание
Если не все значения записаны в нижнем регистре, алфавитная сортировка списка немного усложняется. При определении порядка сортировки появляются разные способы интерпретации прописных букв, и точное определение порядка уже не столь важно (во всяком случае, чтобы отвлекаться на него сейчас). Впрочем, большинство способов сортировки напрямую следует из того, о чем вы узнали в этом разделе.
Вывод списка в обратном порядке
Чтобы переставить элементы списка в обратном порядке, используйте метод reverse(). Скажем, если список машин первоначально хранился в хронологическом порядке даты приобретения, элементы можно легко переупорядочить в обратном хронологическом порядке:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)
Обратите внимание: метод reverse() не сортирует элементы в обратном алфавитном порядке, а просто переходит к обратному порядку списка:
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']
Метод reverse() осуществляет постоянное изменение порядка элементов, но вы можете легко вернуться к исходному порядку, снова применив reverse() к обратному списку.
Определение длины списка
Вы можете быстро определить длину списка с помощью функции len(). Список в нашем примере состоит из четырех элементов, поэтому его длина равна 4:
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4
Метод len() может пригодиться для определения количества пришельцев, которых необходимо сбить в игре; объема данных, которыми необходимо управлять в визуализации; количества зарегистрированных пользователей на веб-сайте и т.д.
примечание
Python подсчитывает элементы списка, начиная с 1, поэтому при определении длины списка ошибок «смещения на 1» уже быть не должно.
Упражнения
3-8. Повидать мир: вспомните хотя бы пять стран, в которых вам хотелось бы побывать.
• Сохраните названия стран в списке. Проследите за тем, чтобы список не хранился в алфавитном порядке.
• Выведите список в исходном порядке. Не беспокойтесь об оформлении списка, просто выведите его как обычный список Python.
• Используйте функцию sorted() для вывода списка в алфавитном порядке без изменения списка.
• Снова выведите список, чтобы показать, что он по-прежнему хранится в исходном порядке.
• Используйте функцию sorted() для вывода списка в обратном алфавитном порядке без изменения порядка исходного списка.
• Снова выведите список, чтобы показать, что исходный порядок не изменился.
• Измените порядок элементов вызовом reverse(). Выведите список, чтобы показать, что элементы следуют в другом порядке.
• Измените порядок элементов повторным вызовом reverse(). Выведите список, чтобы показать, что список вернулся к исходному порядку.