Изучаем Python. Программирование игр, визуализация данных, веб-приложения

Мэтиз Эрик

3. Списки

 

В этой и следующей главах вы узнаете, что собой представляют списки и как начать работать с элементами списка. Списки позволяют хранить в одном месте взаимосвязанные данные, сколько бы их ни было — несколько элементов или несколько миллионов элементов. Работа со списками относится к числу самых выдающихся возможностей Python, доступных для начинающего программиста. Операции со списками связывают воедино многие важные концепции в программировании.

 

Что такое список?

Список — это набор элементов, следующих в определенном порядке. Вы можете создать список для хранения букв алфавита, цифр от 0 до 9 или имен всех членов вашей семьи. В список можно поместить любую информацию, причем данные в списке даже не обязаны быть как-то связаны друг с другом. Так как список обычно содержит более одного элемента, рекомендуется присваивать спискам имена во множественном числе: letters, digits, names и т.д.

В языке Python список обозначается квадратными скобками ([]), а отдельные элементы списка разделяются запятыми. Простой пример списка с названиями моделей велосипедов:

bicycles.py

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

print(bicycles)

Если вы прикажете Python вывести список, то на экране появится перечисление элементов списка в квадратных скобках:

['trek', 'cannondale', 'redline', 'specialized']

Конечно, вашим пользователям такое представление не подойдет; разберемся, как обратиться к отдельным элементам в списке.

 

Обращение к элементам списка

Списки представляют собой упорядоченные наборы данных, поэтому для обращения к любому элементу списка следует сообщить Python позицию (индекс) нужного элемента. Чтобы обратиться к элементу в списке, укажите имя списка, за которым следует индекс элемента в квадратных скобках.

Например, название первого велосипеда в списке bicycles выводится следующим образом:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

(1) print(bicycles[0])

Синтаксис обращения к элементу показан в точке (1) . Когда мы запрашиваем один элемент из списка, Python возвращает только этот элемент без квадратных скобок или кавычек:

trek

Именно такой результат должны увидеть пользователи — чистый, аккуратно отформатированный вывод.

Также можно использовать строковые методы из главы 2 с любым элементом списка. Например, элемент 'trek' можно более аккуратно отформатировать при ­помощи метода title():

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

print(bicycles[0].title())

Этот пример выдает такой же результат, как и предыдущий, только название 'Trek' выводится с прописной буквы.

 

Индексы начинаются с 0, а не с 1

Python считает, что первый элемент списка находится в позиции 0, а не в позиции 1. Этот принцип встречается в большинстве языков программирования и объясняется особенностями низкоуровневой реализации операций со списками. Если вы получаете неожиданные результаты, определите, не допустили ли вы простую ошибку «смещения на 1».

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

В следующем примере выводятся названия велосипедов с индексами 1 и 3:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

print(bicycles[1])

print(bicycles[3])

При этом выводится второй и четвертый элементы списка:

cannondale

specialized

В Python также существует специальный синтаксис для обращения к последнему элементу списка. Если запросить элемент с индексом –1, Python всегда возвращает последний элемент в списке:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

print(bicycles[-1])

Фрагмент вернет значение 'specialized'. Этот синтаксис весьма полезен, потому что при работе со списками часто требуется обратиться к последним элементам, не зная точное количество элементов в списке. Синтаксис также распространяется на другие отрицательные значения индексов. Индекс –2 возвращает второй элемент от конца списка, индекс –3 — третий элемент от конца и т.д.

 

Использование отдельных элементов из списка

Отдельные значения из списка используются так же, как и любые другие переменные. Например, вы можете воспользоваться конкатенацией для построения сообщения, содержащего значение из списка.

Попробуем извлечь название первого велосипеда из списка и составить сообщение, включающее это значение.

bicycles = ['trek', 'cannondale', 'redline', 'specialized']

(1) message = "My first bicycle was a " + bicycles[0].title() + "."

print(message)

В точке (1) программа строит сообщение, содержащее значение из bicycles[0], и сохраняет его в переменной message. Так создается простое предложение с упоминанием первого велосипеда из списка:

My first bicycle was a Trek.

Упражнения

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

3-1. Имена: сохраните имена нескольких своих друзей в списке с именем names. Выведите имя каждого друга, обратившись к каждому элементу списка (по одному за раз).

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

3-3. Собственный список: выберите свой любимый вид транспорта (например, мотоциклы или машины) и создайте список с примерами. Используйте свой список для вывода утверждений об элементах типа: «Я хотел бы купить мотоцикл Honda».

 

Изменение, добавление и удаление элементов

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

 

Изменение элементов в списке

Синтаксис изменения элемента напоминает синтаксис обращения к элементу списка. Чтобы изменить элемент, укажите имя списка и индекс изменяемого элемента в квадратных скобках; далее задайте новое значение, которое должно быть присвоено элементу.

Допустим, имеется список мотоциклов, и первым элементом списка хранится строка 'honda'. Как изменить значение первого элемента?

motorcycles.py

(1) motorcycles = ['honda', 'yamaha', 'suzuki']

print(motorcycles)

(2)motorcycles[0] = 'ducati'

print(motorcycles)

В точке (1) определяется исходный список, в котором первый элемент содержит строку 'honda'. В точке (2) значение первого элемента заменяется строкой 'ducati'. Из вывода видно, что первый элемент действительно изменился, а остальные элементы списка сохранили прежние значения:

['honda', 'yamaha', 'suzuki']

['ducati', 'yamaha', 'suzuki']

Изменить можно значение любого элемента в списке, не только ­первого.

 

Добавление элементов в список

Новые элементы могут добавляться в списки по разным причинам — например, для появления на экране новых космических кораблей, включения новых данных в визуализацию или добавления новых зарегистрированных пользователей на построенный вами сайт. Python предоставляет несколько способов добавления новых данных в существующие списки.

 

Присоединение элементов в конец списка

Простейший способ добавления новых элементов в список — присоединение элемента в конец списка. Используя список из предыдущего примера, добавим новый элемент 'ducati':

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

print(motorcycles)

(1) motorcycles.append('ducati')

print(motorcycles)

Метод append() в точке (1) присоединяет строку 'ducati' в конец списка, другие элементы в списке при этом остаются неизменными:

['honda', 'yamaha', 'suzuki']

['honda', 'yamaha', 'suzuki', 'ducati']

Метод append() упрощает динамическое построение списков. Например, вы можете начать с пустого списка и добавлять в него элементы серией команд append(). В следующем примере в пустой список добавляются элементы 'honda', 'yamaha' и 'suzuki':

motorcycles = []

motorcycles.append('honda')

motorcycles.append('yamaha')

motorcycles.append('suzuki')

print(motorcycles)

Полученный список выглядит точно так же, как и списки из предыдущих примеров:

['honda', 'yamaha', 'suzuki']

Такой способ построения списков встречается очень часто, потому что данные, которые пользователь захочет сохранить в программе, нередко становятся известными только после запуска программы. Чтобы пользователь мог управлять содержимым списка, начните с определения пустого списка, а затем присоединяйте к нему каждое новое значение.

 

Вставка элементов в список

Метод insert() позволяет добавить новый элемент в произвольную позицию списка. Для этого следует указать индекс и значение нового элемента.

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

(1) motorcycles.insert(0, 'ducati')

print(motorcycles)

В этом примере в точке (1) значение 'ducati' вставляется в начало списка. Метод insert() выделяет свободное место в позиции 0 и сохраняет в нем значение 'ducati'. Все остальные значения списка при этом сдвигаются на одну позицию вправо:

['ducati', 'honda', 'yamaha', 'suzuki']

 

Удаление элементов из списка

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

 

Удаление элемента с использованием команды del

Если вам известна позиция элемента, который должен быть удален из списка, воспользуйтесь командой del.

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

print(motorcycles)

(1) del motorcycles[0]

print(motorcycles)

В точке (1) вызов del удаляет первый элемент, 'honda', из списка motorcycles:

['honda', 'yamaha', 'suzuki']

['yamaha', 'suzuki']

Команда del позволяет удалить элемент из любой позиции списка, если вам известен его индекс. Например, вот как из списка удаляется второй элемент 'yamaha':

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

print(motorcycles)

del motorcycles[1]

print(motorcycles)

Второй элемент исчез из списка:

['honda', 'yamaha', 'suzuki']

['honda', 'suzuki']

В обоих примерах значение, удаленное из списка после использования команды del, становится недоступным.

 

Удаление элемента с использованием метода pop()

Иногда значение, удаляемое из списка, должно как-то использоваться. Допустим, вы хотите получить координаты x и y только что сбитого корабля пришельцев, чтобы изобразить взрыв в этой позиции. В веб-приложении пользователь, удаленный из списка активных участников, может быть добавлен в список неактивных и т.д.

Метод pop() удаляет последний элемент из списка, но позволяет работать с ним после удаления. Удалим мотоцикл из списка:

(1) motorcycles = ['honda', 'yamaha', 'suzuki']

print(motorcycles)

(2)popped_motorcycle = motorcycles.pop()

(3)print(motorcycles)

(4)print(popped_motorcycle)

Сначала в точке (1) определяется и выводится содержимое списка motorcycles. В точке (2) значение извлекается из списка и сохраняется в переменной с именем popped_motorcycle. Вывод измененного списка в точке (3) показывает, что значение было удалено из списка. Затем мы выводим извлеченное значение в точке (4), демонстрируя, что удаленное из списка значение остается доступным в программе.

Из вывода видно, что значение 'suzuki', удаленное в конце списка, теперь хранится в переменной popped_motorcycle:

['honda', 'yamaha', 'suzuki']

['honda', 'yamaha']

suzuki

Для чего может понадобиться метод pop()? Представьте, что мотоциклы в списке хранятся в хронологическом порядке в соответствии с датой их покупки. В таком случае команда pop() может использоваться для вывода сообщения о последнем купленном мотоцикле:

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

last_owned = motorcycles.pop()

print("The last motorcycle I owned was a " + last_owned.title() + ".")

Программа выводит простое сообщение:

The last motorcycle I owned was a Suzuki.

 

Извлечение элементов из произвольной позиции списка

Вызов pop() может использоваться для удаления элемента в произвольной позиции списка; для этого следует указать индекс удаляемого элемента в круглых скобках.

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

(1) first_owned = motorcycles.pop(0)

(2)print('The first motorcycle I owned was a ' + first_owned.title() + '.')

Сначала первый элемент извлекается из списка в точке (1) , а затем в точке (2) выводится сообщение об этом мотоцикле. Программа выводит простое сообщение о первом мотоцикле:

The first motorcycle I owned was a Honda.

Помните, что после каждого вызова pop() элемент, с которым вы работаете, уже не находится в списке.

Если вы не уверены в том, какой из двух способов выбрать — команду del или метод pop(), — то простое правило поможет вам определиться. Если вы собираетесь просто удалить элемент из списка, никак не используя его, выбирайте команду del; если же вы намерены использовать элемент после удаления из списка, выбирайте метод pop().

 

Удаление элементов по значению

Иногда позиция удаляемого элемента неизвестна. Если вы знаете только значение элемента, используйте метод remove().

Допустим, из списка нужно удалить значение 'ducati':

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

print(motorcycles)

(1) motorcycles.remove('ducati')

print(motorcycles)

Код в точке (1) приказывает Python определить, в какой позиции списка находится значение 'ducati', и удалить этот элемент:

['honda', 'yamaha', 'suzuki', 'ducati']

['honda', 'yamaha', 'suzuki']

Метод remove() также может использоваться для работы со значением, которое удаляется из списка. Следующая программа удаляет значение 'ducati' и выводит причину удаления:

(1) motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']

print(motorcycles)

(2)too_expensive = 'ducati'

(3)motorcycles.remove(too_expensive)

print(motorcycles)

(4)print("\nA " + too_expensive.title() + " is too expensive for me.")

После определения списка в точке (1) значение 'ducati' сохраняется в переменной с именем too_expensive в точке (2). Затем эта переменная сообщает Python, какое значение должно быть удалено из списка (3). В точке (4) значение 'ducati' было удалено из списка, но продолжает храниться в переменной too_expensive, что позволяет вывести сообщение с причиной удаления 'ducati' из списка мотоциклов:

['honda', 'yamaha', 'suzuki', 'ducati']

['honda', 'yamaha', 'suzuki']

A Ducati is too expensive for me.

примечание

Метод remove() удаляет только первое вхождение заданного значения. Если существует вероятность того, что значение встречается в списке более одного раза, используйте цикл для определения того, были ли удалены все вхождения данного значения. О том, как это делать, рассказано в главе 7.

Упражнения

Следующие упражнения немного сложнее упражнений из главы 2, но они предоставляют возможность попрактиковаться в выполнении всех описанных операций со списками.

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

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:

['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

. .print(motorcycles[3])

IndexError: list index out of range

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

Ошибка индексирования означает, что Python не может понять, какой индекс запрашивается в программе. Если в вашей программе происходит ошибка индексирования, попробуйте уменьшить запрашиваемый индекс на 1. Затем снова запустите программу и проверьте правильность результатов.

Помните, что для обращения к последнему элементу в списке используется ­индекс –1. Этот способ работает всегда, даже если размер списка изменился с ­момента последнего обращения к нему:

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

print(motorcycles[-1])

Индекс –1 всегда возвращает последний элемент списка, в данном случае значение 'suzuki':

'suzuki'

Этот синтаксис порождает ошибку только в одном случае — при попытке получить последний элемент пустого списка:

motorcycles = []

print(motorcycles[-1])

В списке motorcycles нет ни одного элемента, поэтому Python снова выдает ошибку индексирования:

Traceback (most recent call last):

File "motorcyles.py", line 3, in

. .print(motorcycles[-1])

IndexError: list index out of range

примечание

Если в вашей программе произошла ошибка индексирования и вы не знаете, как с ней справиться, попробуйте вывести список или хотя бы его длину. Возможно, ваш список выглядит совсем не так, как вы думаете, особенно если его содержимое динамически определялось программой. Фактическое состояние списка или точное количество элементов в нем поможет вам выявить логические ошибки такого рода.

Упражнения

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

 

Итоги

В этой главе вы узнали, что представляют собой списки и как работать с отдельными элементами в списках. Вы научились определять списки, добавлять и удалять элементы, выполнять сортировку (постоянную или временную для отображения). Также вы узнали, как определить длину списка и как избежать ошибок индексирования при работе со списком.

В главе 4 рассматриваются приемы более эффективной работы со списками. Перебор всех элементов списка всего в нескольких строках кода, даже если список содержит тысячи или миллионы элементов, сокращает объем программы.