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

3-5. Изменение списка гостей: вы только что узнали, что один из гостей прийти не сможет, поэтому вам придется разослать новые приглашения. Отсутствующего гостя нужно заменить кем-то другим.

• Начните с программы из упражнения 3-4. Добавьте в конец программы команду print для вывода имени гостя, который прийти не сможет.

• Измените список и замените имя гостя, который прийти не сможет, именем нового приглашенного.

• Выведите новый набор сообщений с приглашениями – по одному для каждого участника, входящего в список.

3-6. Больше гостей: вы решили купить обеденный стол большего размера. Дополнительные места позволяют пригласить на обед еще трех гостей.

• Начните с программы из упражнения 3-4 или 3-5. Добавьте в конец программы команду print, которая выводит сообщение о расширении списка гостей.

• Добавьте вызов insert() для добавления одного гостя в начало списка.

• Добавьте вызов insert() для добавления одного гостя в середину списка.

• Добавьте вызов append() для добавления одного гостя в конец списка.

• Выведите новый набор сообщений с приглашениями – по одному для каждого участника, входящего в список.

3-7. Сокращение списка гостей: только что выяснилось, что новый обеденный стол привезти вовремя не успеют, и места хватит только для двух гостей.

• Начните с программы из упражнения 3-6. Добавьте команду для вывода сообщения о том, что на обед приглашаются всего два гостя.

• Используйте метод pop() для последовательного удаления гостей из списка до тех пор, пока в списке не останутся только два человека. Каждый раз, когда из списка удаляется очередное имя, выведите для этого человека сообщение о том, что вы сожалеете об отмене приглашения.

• Выведите сообщение для каждого из двух человек, остающихся в списке. Сообщение должно подтверждать, что более раннее приглашение остается в силе.

• Используйте команду del для удаления двух последних имен, чтобы список остался ­пустым. Выведите список, чтобы убедиться в том, что в конце работы программы список действительно не содержит ни одного элемента.

Упорядочение списка

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

Постоянная сортировка списка методом sort()

Метод 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: