Добрый, добрый Python
November 21, 2023
Stepik: Вложенные циклы
На этом занятии разберемся, как реализуются вложенные циклы
for x in <объект>:
for y in <объект>:
оператор 1
.........
оператор Nwhile <условие>:
while <условие>:
оператор 1
.........
оператор Nfor x in <объект>:
while <условие>:
оператор 1
.........
оператор Nwhile <условие>:
for x in <объект>:
оператор 1
.........
оператор Nfor 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 = 5a = [[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()В математике это называется транспонированием матрицы.