Циклы внутри цикла. Как оптимизировать?
На вход подается натуральное число 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 шт):
Например, можно использовать рекурсию:
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")
Я тут подумал насчет вашей идеи, и вот к какому результату я пришел:
#!/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, так что получается, в принципе тот-же результат.