Выбрать главу

['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(). Выведите список, чтобы показать, что список вернулся к исходному порядку.

• Отсортируйте список в алфавитном порядке вызовом sort(). Выведите список, чтобы показать, что элементы следуют в другом порядке.

• Вызовите sort() для перестановки элементов списка в обратном алфавитном порядке. Выведите список, чтобы показать, что порядок элементов изменился.

3-9. Количество гостей: в одной из программ из упражнений с 3-4 по 3-7 используйте len() для вывода сообщения с количеством людей, приглашенных на обед.

3-10. Все функции: придумайте информацию, которую можно было бы хранить в списке. Например, создайте список гор, рек, стран, городов, языков… словом, чего угодно. Напишите программу, которая создает список элементов, а затем вызывает каждую функцию, упоминавшуюся в этой главе, хотя бы один раз.

Ошибки индексирования при работе со списками

Когда программист только начинает работать со списками, он часто допускает одну характерную ошибку. Допустим, имеется список с тремя элементами, и программа запрашивает четвертый элемент:

motorcycles = ['honda', 'yamaha', 'suzuki']

print(motorcycles[3])

В этом случае происходит ошибка индексирования:

Traceback (most recent call last):

File "motorcycles.py", line 3, in <module>

. .print(motorcycles[3])

IndexError: list index out of range

Python пытается вернуть элемент с индексом 3. Однако при поиске по списку ни один элемент motorcycles не обладает индексом 3. Из-за смещения индексов на 1 эта ошибка весьма распространена. Люди думают, что третьим элементом является элемент с индексом 3, потому что они начинают отсчет с 1. Но для Python третьим является элемент с индексом 2, потому что индексирование начинается с 0.