Циклы со списками в Python

Материал из Викижурнал
Перейти к навигации Перейти к поиску
Циклы со списками в Python
Циклы со списками в Python
Тематические порталы

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

Цикл по всему списку

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

Допустим, у нас есть список имен фокусников, и мы хотим распечатать каждое имя в списке. Мы могли бы сделать это, извлекая каждое имя из списка по отдельности, но такой подход может вызвать несколько проблем. Выводить имена по одному было бы не практично, особенно с длинным списком имен. Кроме того, нам придется менять наш код каждый раз, когда изменяется длина списка. Цикл "for" позволяет избежать этих проблем, позволяя Python самостоятельно решать такую задачу. Давайте использовать цикл for, чтобы распечатать каждое имя в списке магов:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician)

Сначала начинаем с определения списка, как мы это делали вводной статье про списки. Затем мы определяем цикл "for". Эта строка говорит Python вытащить имя из списка и сохранить его в переменной "magician". Затем мы говорим Python вывести имя, которое было только что сохранено в переменной "magician". Затем Python повторяет действие по одному разу для каждого имени в списке. Вывод данных представляет собой простой вывод каждого имени в списке:

alice
david
carolina

Детальный взгляд на циклы

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

for magician in magicians:

Эта строка указывает Python извлечь первое значение из списка и сохранить его в переменной magician. Это первое значение - «alice». Затем Python читает следующую строку:

print(magician)

Python выводит текущее значение, которое является значение «alice». Так как список содержит больше значений, Python возвращается к первой строке цикла:

for magician in magicians:

Python получает следующее значение в списке, «david», и сохраняет это значение в переменной и выполняет строку:

print(magician)

Python снова выводит текущее значение в переменной magician, которое является «david». Python повторяет весь цикл еще раз с последним значением в списке, «carolina». Так как в списке больше нет значений, Python переходит на следующую строку в программе. В этом случае после цикла "for" ничего не приходит, поэтому программа просто завершается.

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

Также помните, что при написании собственных циклов "for" вы можете выбрать любое имя для временной переменной, которая содержит каждое значение в списке. Следует знать, что следует выбрать значимое имя, представляющее один элемент из списка. Например, вот хороший способ запустить цикл "for" для списка кошек, списка собак и общего списка элементов:

for cat in cats:
for dog in dogs:
for item in list_of_items:

Подобное назначение имён могут помочь вам следить за действиями, выполняемыми над каждым элементом в цикле for. Использование имен единственного и множественного числа может помочь вам определить, работает ли раздел кода с одним элементом из списка или со всем списком.

Возможности использования циклов

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

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")

Единственное отличие в этом коде состоит в том, что мы составляем сообщение каждому из списка, начиная с его имени. В первый раз в цикле значение magician = "Aice", поэтому Python запускает первое сообщение с именем 'Alice'. Затем выводится сообщение начнется с "david", потом сообщение начнется с "Carolina". Выводим сообщение для каждого имени в списке:

Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!

Можно написать столько строк кода, сколько захотите в цикле for. Каждая строка с отступом, следующая за строкой "for magician in magicians", рассматривается внутри цикла, и каждая строка с отступом выполняется один раз для каждого значение в списке. Поэтому вы можете выполнять вывод столько, сколько в этом есть необходимости с каждым значением в списке. Давайте добавим вторую строку к нашему сообщению, сообщая каждому имени из списка, что мы с нетерпением ждем его следующего трюка:

magicians = ['alice', 'david', 'carolina']
for magician in magicians:
    print(magician.title() + ", that was a great trick!")
    print("I can't wait to see your next trick, " + magician.title() + ".\n")

Так как мы выделили два операторы вывода данных, каждая строка будет выполнена один раз для каждого имени в списке. Новая строка ("\n") во втором операторе вывода данных содержит пустую строку после каждого прохождения цикла. Это создает набор сообщений, которые аккуратно сгруппированы для каждого человека в списке:

Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

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

Действия после использования циклов

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

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

magicians = ['alice', 'david', 'carolina']
   for magician in magicians:
       print(magician.title() + ", that was a great trick!")
       print("I can't wait to see your next trick, " + magician.title() + ".\n")

print("Thank you, everyone. That was a great magic show!")

Первые два оператора печати повторяются один раз для каждого имени в списке, как вы видели ранее. Однако, поскольку строка дальше не имеет отступа, она печатается только один раз:

Alice, that was a great trick!
I can't wait to see your next trick, Alice.

David, that was a great trick!
I can't wait to see your next trick, David.

Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.

Thank you, everyone. That was a great magic show!

Когда обрабатываются данные с помощью цикла for, вы обнаружите, что это хороший способ подвести итог операции, которая была выполнена для всего набора данных. Например, вы можете использовать цикл for для инициализации игры, просматривая список персонажей и отображая каждого персонажа на экране. После этого вы можете написать блок с отступом, который отображает кнопку «Воспроизвести сейчас» после того, как все данные выведены на экран.

Циклы со срезом данных в списке

В статье про дополнительные операции со списками мы узнали, как можно работать со срезами данных. Также следует отметить, что можно производить цикл "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

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

Примечание

Основная статья: Циклы со словарями в Python

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

Другие статьи о Python