Циклы внутри цикла. Как оптимизировать?

На вход подается натуральное число n. Допустим, если n = 3, то код должен выполнять такую функцию:

for i in x:
    print(i)
    for j in x:
        print(j)
        for q in x:
            print(q)

Если n = 1, то:

for i in x:
    print(i)

То есть, если n будет равно, допустим, 50, то таких циклов должно быть 50. Есть ли способ написать такой код без расписывания минимум ста циклов внутри цикла?


Ответы (3 шт):

Автор решения: Ivan
def handle(n):
    for i in x:
        print(i)
    n -= 1
    if n > 0:
        return handle(n) 
→ Ссылка
Автор решения: MBo

Например, можно использовать рекурсию:

def recfun(n, x):
    if n:
        for i in x:
            print(i)
            recfun(n-1, x)

А можно сделать цикл for по значениям k от 0 до Q^n-1, где Q - размер x, и выводить представление k в Q-ричной системе счисления.

А можно так, как электросчётчик работает... Однако рекурсивный код проще всего.

def recfun(n, x, s = ""):
    if n:
        for i in x:
            #print(i)
            recfun(n-1, x, s + i)
    else:
        print(s)

recfun(3, "01")
→ Ссылка
Автор решения: GUIMish

Я тут подумал насчет вашей идеи, и вот к какому результату я пришел:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

var = {};

def loop(nmb, lst, id = 0):
    if (nmb < 1): pass
    else:
        for var[id] in lst:
            print(var[id]);
            loop(nmb-1, lst, id+1);
    

n = 3;
lst = ["hello", "hi", "greetings"];
loop(n, lst);

Вместо того что-бы изменялись переменные (i, j, q, w, ...), я использовал одну переменную, в которой я присваивал свой id, так что получается, в принципе тот-же результат.

→ Ссылка