Добрый, добрый 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()