Цикл по спискам, кортежам, словарям и строкам, а также управление циклами - break, continue, pass

Что зацикливается

В программировании цикл означает повторение одного и того же набора вычислений в одной и той же последовательности несколько раз.

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

Затем вы выбираете другое дерево, измеряете его диаметр и высоту, записываете их в блокнот и оцениваете его общий объем.

Затем вы выбираете еще одно дерево, измеряете его диаметр и высоту, записываете их в блокнот и оцениваете его общий объем.

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

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

Что мы можем перебрать?

Так что мы можем перебрать? По сути, любой итерируемый тип данных. Итерируемые объекты в Python - это последовательность значений, хранящихся в различных форматах данных, таких как:

  • списки (например, [10,12,13,15])
  • кортежи (например, (10,12,13,15)
  • словари (например, {‘Name’: ‘Alan’, ‘Age’: 25})
  • строки (например, «Data Science»)

Какие бывают петли?

Вы в основном встретите два типа циклов: цикл for и цикл while. Среди них циклы for являются наиболее распространенным видом, применяемым в задачах науки о данных. Ключевые отличия:

  • циклы for повторяются конечное число раз для каждого элемента в повторяемом объекте
  • в то время как циклы продолжаются до тех пор, пока не будет выполнено определенное условие

Цикл по спискам

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

my_list = [1,2,3,4]

И вас просят вычислить квадрат каждого значения в списке:

for each_value in my_list:
    print(each_value * each_value)
Out:
1
4
9
16

Точно так же вы можете делать немного более сложные циклы (например, «вложенные циклы»). Например, вам дают два списка и просят (i) умножить значения одного списка на другой, (ii) добавить их в пустой список и (iii) распечатать новый список. Давайте сделаем это по порядку:

new_list = []
list1 = [2, 3, 4]
list2 = [4, 5, 6]
for i in list1:
    for j in list2:
        new_list.append(i*j)
        
print(new_list)
Out:
[8, 10, 12, 12, 15, 18, 16, 20, 24]

Цикл по кортежам

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

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

students = [('Allie', 22), ('Monty', 18), ('Rebecca', 19)]

Теперь задача состоит в том, чтобы (i) извлечь все возрасты и (ii) сохранить их в списке и (iii) вычислить средний возраст:

ages = []
for i,j in students:
    ages.append(j)
avg = sum(ages)/len(ages)
print(avg)
Out: 
19.666666666666668

Каждый кортеж здесь содержит два элемента (имя и возраст). Даже если вас не интересуют имена, с помощью i и j вы указываете оба этих элемента и просите добавить элемент j (age ) в новом списке. Это называется «распаковкой кортежа».

Перебирать словари

Словари в Python представляют собой набор пар ключ-значение, то есть каждый элемент в словаре имеет ключ и соответствующее значение. Пример словаря:

# fruit price dictionary
fruit_prices = {"apple": 2.50, "orange": 4.99, "banana": 0.59}

Вы можете перебирать эти элементы словаря и выполнять различные операции. Вот несколько примеров:

Извлечение всех ключей в словаре:

for i in fruit_prices.keys():
    print(i)
Out:
apple
orange
banana

Сохранение всех значений в списке:

values = []
for i in fruit_prices.values():
    values.append(i)
print(values)
Out:
[2.5, 4.99, 0.59]

Задача: можете ли вы найти в словаре среднее значение всех цен?

Зацикливание на струнах

Рассмотрим строку - «Привет». Это похоже на повторяющийся объект? На самом деле это так.

for i in 'Hello':
    print(i)
Out:
H
e
l
l
o

Вы можете распаковать каждый символ в строке с помощью цикла for и выполнять с ними всевозможные операции.

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

sent = 'the sky is blue'
# splitting the sentence into words
sent_split = sent.split()
# extract each word with a loop
for i in sent_split:
    print(i)
Out:
the
sky
is
blue

Пока петли

Подобно циклам for, циклы while повторно выполняют блок кода - пока выполняется условие. Цикл прерывается только тогда, когда условие цикла ложно.

Общая структура циклов while выглядит так:

i = 0
while i <=5:
    print(i)
    i = i+1 # option to break out of the loop
Out:
0
1
2
3
4
5

В приведенном выше примере на каждой итерации значение i печатается до тех пор, пока не достигнет 5. После этого условие цикла while становится ложным (т. Е. i ≤ ​​5 становится ложным, когда i = 6).

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

user_id = 'user101'
while True:
    user = input('Enter your user ID: ')
    
    if user == user_id:
        print("You have entered ", user) 
        break
    else:
        print("Enter a valid user ID ")

Контроль цикла: продолжить, прервать, пройти

Есть три вида так называемых ключевых слов управления циклом: break, continue и pass. Эти операторы изменяют ход цикла и позволяют программе выйти или пропустить часть цикла при срабатывании определенного внешнего условия.

Перерыв

Если в цикле присутствует оператор break , он завершает цикл, когда условие удовлетворяется.

string = 'hello, there'
for i in string:
    if i == ',':
        break
    print(i)
Out:
h
e
l
l
o

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

Продолжать

Вместо выхода из цикла оператор continue просто пропускает итерацию и переходит к следующей.

Давайте выполним тот же код выше, но с ключевым словом continue.

string = 'hello, there'
for i in string:
    if i == ',':
        continue
    print(i)
Out:
h
e
l
l
o
 
t
h
e
r
e

Таким образом, в этом случае, если цикл встречает запятую, цикл просто продолжает пропускать запятую.

Итак, в примере измерения дерева, если вы встретите мертвое / сломанное дерево, вы просто пропустите его и переходите к следующему.

Проходить

pass ничего не делает, это просто заполнитель для еще не написанного утверждения.

string = 'hello, there'
for i in string:
    pass

Если мы не поместили туда pass, будет выдано сообщение об ошибке, и остальная часть кода не будет выполнена.

Резюме

Целью этой статьи было дать интуитивное представление о for loops и while loops в Python. Были приведены примеры того, как перебирать повторяющиеся объекты, такие как списки, кортежи, словари и строки. Ближе к концу были рассмотрены концепции операторов управления циклом - break, continue и pass - с примерами.

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

Надеюсь, эта статья была полезной, если у вас есть комментарии, не стесняйтесь записывать их ниже или связываться со мной через Medium, Twitter или LinkedIn.