Добрый, добрый Python
November 21, 2023

Stepik: Вложенные циклы

На этом занятии разберемся, как реализуются вложенные циклы

Такие как:

for x in <объект>:
    for y in <объект>:
        оператор 1
        .........
        оператор N
while <условие>:
    while <условие>:
        оператор 1
        .........
        оператор N
for x in <объект>:
    while <условие>:
        оператор 1
        .........
        оператор N
while <условие>:
    for x in <объект>:
        оператор 1
        .........
        оператор N
for i in range(1, 4):
    for j in range(1, 6):
        print(f'i = {i}, j = {j}', end = ' ')
    print()
# Вывод: i = 1, j = 1 i = 1, j = 2 i = 1, j = 3 i = 1, j = 4 i = 1, j = 5
       # i = 2, j = 1 i = 2, j = 2 i = 2, j = 3 i = 2, j = 4 i = 2, j = 5
       # i = 3, j = 1 i = 3, j = 2 i = 3, j = 3 i = 3, j = 4 i = 3, j = 5
a = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
for row in a:
    for x in row:
        print(x, type(x), end = ' ')
    print()
# Вывод: 1 <class 'int'> 2 <class 'int'> 3 <class 'int'> 4 <class 'int'>
       # 2 <class 'int'> 3 <class 'int'> 4 <class 'int'> 5 <class 'int'>
       # 3 <class 'int'> 4 <class 'int'> 5 <class 'int'> 6 <class 'int'>

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

a = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
b = [[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3]]
c = []
for i, row in enumerate(a):
    r = [] # список для формирования строки соответствующих вложенных списков
    for j, x in enumerate(row):
        r.append(x + b[i][j])
    c.append(r)
print(c)
# Вывод: [[2, 3, 4, 5], [4, 5, 6, 7], [6, 7, 8, 9]]

Пример - В строках есть 2 и более пробелов. Задача - сделать так, чтобы пробелов было по одному

t = ["– Скажи-ка,  дядя, ведь не даром",
    "Я Python выучил с   каналом",
    "Балакирев что    раздавал?",
    "Ведь были  ж заданья боевые,",
    "Да, говорят,  еще какие!",
    "Недаром помнит    вся Россия",
    "Как мы рубили   их тогда!"
]
for i, line in enumerate(t):
    while line.count('  '):
        line = line.replace('  ', ' ')
    t[i] = line
print(t)
# Вывод: ['– Скажи-ка, дядя, ведь не даром', 'Я Python выучил с каналом', 'Балакирев что раздавал?', 'Ведь были ж заданья боевые,', 'Да, говорят, еще какие!', 'Недаром помнит вся Россия', 'Как мы рубили их тогда!']

Пример - Создадим двумерный список из M строк и N столбцов

M, N = list(map(int, input('Введите M и N: ').split()))
zeros = []
for i in range(M):
    zeros.append([0] * N)
print(zeros)
# Ввод: 2 3
# Вывод: [[0, 0, 0], [0, 0, 0]]
# А потом захотели изменить 0 на 1
for i in range(M):
    for j in range(N):
        zeros[i][j] = 1
print(zeros)
# Вывод: [[1, 1, 1], [1, 1, 1]]

Пример. Мы бы хотели изменить значение его строк на значение столбцов. Немного повернуть.

A = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]
for i in range(len(A)):
    for j in range(i + 1, len(A)):
        A[i][j], A[j][i] = A[j][i], A[i][j]
for r in A:
    for x in r:
        print(x, end = '\t')
    print()

В математике это называется транспонированием матрицы.

ТЕКСТ ЛЕКЦИИ