Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a function for recursively generating iterating functions

I currently have a bit of Python code that looks like this:

for set_k in data:
    for tup_j in set_k:
        for tup_l in tup_j:

The problem is, I'd like the number of nested for statements to differ based on user input. If I wanted to create a function which generated n number of for statements like those above, how might I go about doing that?

like image 924
Daniel Avatar asked Mar 01 '18 22:03

Daniel


1 Answers

def nfor(data, n=1):
    if n == 1:
        yield from iter(data)
    else:
        for element in data:
            yield from nfor(element, n=n-1)

Demo:

>>> for i in nfor(['ab', 'c'], n=1):
...     print(i)
...     
ab
c
>>> for i in nfor(['ab', 'c'], n=2):
...     print(i)
...     
a
b
c
like image 161
wim Avatar answered Sep 28 '22 08:09

wim