tgoop.com/python_real/994
Create:
Last Update:
Last Update:
Вложенные циклы в Python
Вложенные циклы позволяют размещать один цикл внутри другого и тем самым выполнять повторяющиеся действия над несколькими последовательностями. Понимание этой концепции помогает писать более эффективный код, управлять сложными структурами данных и избегать проблем с читабельностью и производительностью.
Начало работы с вложенными циклами
В Python есть два основных типа циклов — for
и while
.
* for
-цикл проходит по элементам последовательности (списка, диапазона и т. д.), когда количество итераций известно заранее.
* while
-цикл выполняется, пока истинно заданное условие, и полезен, когда число итераций заранее не определено.
Вложенный цикл создаётся размещением одного цикла внутри другого:
for outer_variable in outer_iterable:
for inner_variable in inner_iterable:
<body>
Для каждой итерации внешнего цикла внутренний выполняется полностью.
Аналогия: часовая и минутная стрелки часов. Часовая проходит круг за 12 часов, минутная — за 1 час, но работают они совместно.
for hour in range(24):
for minute in range(60):
print(f"{hour:02d}:{minute:02d}")
Практические примеры
Печать шаблонов
height = 6
sail_patterns = "*#-x+o"
for row in range(height):
pattern = ""
spacing = " " * (height - row)
for symbol in sail_patterns:
pattern += symbol * row + spacing
print(pattern)
Таблица умножения
for multiplicant in range(1, 11):
for multiplier in range(1, 4):
expression = f"{multiplicant:>2d} × {multiplier}"
product = multiplicant * multiplier
print(f"{expression} = {product:>2d}", end="\t")
print()
Суммирование элементов во вложенных списках
resource_donators = [
[8, 6, 3],
[9, 2, 7],
[4, 1, 5]
]
total_resources = 0
for planet in resource_donators:
for resource in planet:
total_resources += resource
print(total_resources) # 45
Парные комбинации без самих себя
players = ["Bonnie", "Mike", "Raj", "Adah"]
for player1 in players:
for player2 in players:
if player1 != player2:
print(f"{player1} vs {player2}")
Вложенный
while
while True:
word = input("Введите слово (exit — для выхода): ")
if word == "exit":
break
for letter in word:
print(letter)
Частые проблемы вложенных циклов
* Область видимости переменных. Не используйте одинаковые имена во внешнем и внутреннем циклах.
* Читаемость. Глубокая вложенность усложняет понимание кода.
* Производительность. Каждый дополнительный уровень увеличивает временную сложность (часто до
O(n²)
и выше).Оптимизация
*
break
и continue
позволяют досрочно завершать цикл или пропускать ненужные итерации.* List Comprehension делает выражения компактнее, хотя не всегда улучшает производительность.
# Поиск "bacon" с break
for layer in blt_sandwich:
for ingredient in layer:
if ingredient == target:
print("Found bacon!")
break
if target in layer:
break
Вывод
Вложенные циклы — мощный инструмент для работы с многомерными данными и повторяющимися задачами. Однако злоупотребление ими ухудшает читаемость и скорость. Используйте их осознанно, оптимизируйте при помощи
break
, continue
и list comprehension, и никогда не забывайте о сложности алгоритма.https://realpython.com/nested-loops-python/
#python
👉 @python_real
BY Реальный Python

Share with your friend now:
tgoop.com/python_real/994