Это плохая практика использовать 3 вложенных для циклов (или больше!) - PullRequest
0 голосов
/ 24 февраля 2019

Мне всегда было интересно, как лучше писать код как профессионал.

for i in a[:]:
    print("i in for loop = %s" %i)
    print("\n")
    for x in range(2):
        for y in range(2):
            print(y)
print("A mask for this image can be of row * column config. 1x1, 1x2, 1x3, 2x1,...,3x3:")

Что-то подсказывает мне, что мой подход никогда не является предпочтительным.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

В общем, чем больше у вас вложенности, тем сложнее читать код.В тех случаях, когда вы просто хотите что-то сделать для каждого x и y в некотором диапазоне, вы можете использовать itertools.product:

import itertools
for x, y in itertools.product(range(2), range(2)):
    # Do something for every x, y
    print(x, y)

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

0 голосов
/ 24 февраля 2019

Практика заключается в том, чтобы избегать как можно большего, потому что количество вложенных циклов и эффективность напрямую связаны.

Если у вас 1 вложенный цикл, сложность алгоритма в среднем составляет O (n) 2 и 2 вложенныхсложность циклов увеличивается до O (n) 3.Если в вашей структуре данных есть n элементов, скажем, n = 1000 O (n) 2 эквивалентно 1000 * 1000 пересечению элементов в вашей структуре данных и O (n) 3 1000 *1000* 1000. Глобальная сложность алгоритма зависит оттакже на возможные функции внутри вложенных циклов и может увеличить конечную сложность.

...