Глава 4 • Работа со списками
Python возвращает все элементы с третьего до конца списка:
['michael', 'florence', 'eli']
Этот синтаксис позволяет вывести все элементы от любой позиции до конца спи-
ска независимо от его длины. Вспомните, что отрицательный индекс возвращает
элемент, находящийся на заданном расстоянии от конца списка; следовательно, вы
можете получить любой срез от конца списка. Например, чтобы отобрать последних
трех игроков, используйте срез
players[-3:]
:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print(players[-3:])
Программа выводит имена трех последних игроков, причем продолжает работать
даже при изменении размера списка.
Перебор содержимого среза
Если вы хотите перебрать элементы, входящие в подмножество элементов, исполь-
зуйте срез в цикле
for
. В следующем примере программа перебирает первых трех
игроков и выводит их имена:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
Вместо того чтобы перебирать весь список игроков
, Python ограничивается
первыми тремя именами:
Here are the first three players on my team:
Charles
Martina
Michael
Срезы приносят огромную пользу во многих ситуациях. Например, при создании
компьютерной игры итоговый счет игрока может добавляться в список после
окончания текущей партии. После этого программа может получить три лучших ре-
зультата игрока, отсортировав список по уменьшению и получив срез, включающий
только три элемента. При работе с данными срезы могут использоваться для об-
работки данных блоками заданного размера. Или при построении веб-приложения
срезы могут использоваться для постраничного вывода информации так, чтобы
на каждой странице выводился соответствующий объем информации.
Копирование списка
Часто разработчик берет существующий список и создает на его основе совершенно
новый. Посмотрим, как работает копирование списков, и рассмотрим одну ситуа-
цию, в которой копирование списка может принести пользу.
Работа с частью списка
75
Чтобы скопировать список, создайте срез, включающий весь исходный список
без указания первого и второго индекса (
[:]
). Эта конструкция создает срез,
который начинается с первого элемента и завершается последним; в результате
создается копия всего списка.
Представьте, что вы создали список своих любимых блюд и теперь хотите создать
отдельный список блюд, которые нравятся вашему другу. Пока вашему другу
нравятся все блюда из нашего списка, поэтому вы можете создать другой список
простым копированием нашего:
foods.py
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
В точке
создается список блюд с именем
my_foods
. В точке
создается дру-
гой список с именем
friend_foods
. Чтобы создать копию
my_foods
, программа
запрашивает срез
my_foods
без указания индексов, и мы сохраняем копию
в
friend_foods
.
При выводе обоих списков становится видно, что они содержат одинаковые данные:
My favorite foods are:
['pizza', 'falafel', 'carrot cake']
My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']
Чтобы доказать, что речь в действительности идет о двух разных списках, добавим
новое блюдо в каждый список:
my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]
my_foods.append('cannoli')
friend_foods.append('ice cream')
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
В точке
исходные элементы
my_foods
копируются в новый список
friend_foods
,
как было сделано в предыдущем примере. Затем в
каждый список добавляется
новый элемент:
'cannoli'
в
my_foods
, и
'ice cream'
в
friend_foods
. После этого
вывод двух списков наглядно показывает, что каждое блюдо находится в соответ-
ствующем списке.
|