[Python Edinburgh] How to do dynamic nesting of loops

Andre Engelbrecht litt.fire.sa at gmail.com
Tue Nov 18 14:20:53 CET 2014


Actually, Tom's use of itertools is more accurate than my patch-job :)

Andre Engelbrecht
Web Developer/Designer
http://andre.engelbrechtonline.net
http://www.tehnode.co.uk

Too brief? Here's why! http://emailcharter.org

On Tue, Nov 18, 2014 at 1:07 PM, Tom Dalton <tom.dalton at fanduel.com> wrote:

> You can use itertools.product to simplify this even further. If the
> max-count for each loop is the same then you can do:
>
> import itertools
> N=3
> for x in itertools.product(range(10), repeat=N):
>     print x
>
> If the max-count is different you can specify the range for each part
> separately:
>
> for x in itertools.product(range(2), range(3), range(4)):
>     print x
>
> Ref https://docs.python.org/2/library/itertools.html#itertools.product
>
> Tom
>
> On 18 November 2014 13:04, Andre Engelbrecht <litt.fire.sa at gmail.com>
> wrote:
>
>> Something like this maybe?
>>
>> https://gist.github.com/andrewebdev/e3a979cfb46380884f3a
>>
>> Andre Engelbrecht
>> Web Developer/Designer
>> http://andre.engelbrechtonline.net
>> http://www.tehnode.co.uk
>>
>> Too brief? Here's why! http://emailcharter.org
>>
>> On Tue, Nov 18, 2014 at 12:56 PM, Kenny Erasmuson <
>> kennyerasmuson at gmail.com> wrote:
>>
>>> It sounds like some kind of recursive function may be needed here.
>>> However, it also looks like the 'inner' most function call will then be
>>> operating on a variable number of parameters (e.g. l, m and n in your
>>> example, but it could be l, m, n, k, z, etc). Is that right?
>>>
>>> On 18 November 2014 12:53, Tom Dalton <tom.dalton at fanduel.com> wrote:
>>>
>>>> Hey Doug,
>>>>
>>>> There are a few ways you could do this, but it would be helpful if you
>>>> could give a little more context on where you get l,m and n from and where
>>>> the limit (10) comes from for each (or how it's determined). Also, what
>>>> does the thing that uses those variables look like? Is it separate function
>>>> calls, or a function that takes a list of arguments, or something else?
>>>>
>>>> Cheers,
>>>>
>>>> Tom
>>>>
>>>> On 18 November 2014 12:08, Douglas Houston <
>>>> douglasrhouston at googlemail.com> wrote:
>>>>
>>>>> Hi all,
>>>>>
>>>>> I'm a bit stuck with this so maybe someone can help me.
>>>>>
>>>>> I'm writing a little program that needs to iterate through several
>>>>> nested 'for' loops. However, the number of loops (and therefore the depth
>>>>> of the nesting) cannot be predetermined.
>>>>>
>>>>> I've read that lots of nested loops are bad form anyway, and that "you
>>>>> should do it with functions instead".
>>>>>
>>>>> However I still can't work out how to set the number dynamically.
>>>>>
>>>>>
>>>>> for ((l=0; l<10; l++)); do
>>>>> ​ ​
>>>>>  for ((m=0; m<10; m++))
>>>>> ​;​
>>>>> do
>>>>>
>>>>> ​ ​
>>>>> for (n=0; n<10; n++)); do
>>>>>
>>>>> ​ ​
>>>>> something
>>>>> ​ that uses l, m and n​
>>>>>
>>>>>     done
>>>>>   done
>>>>> done
>>>>>
>>>>> So this is what it needs to look like if nest_depth=3
>>>>>
>>>>> But how do I write a program that iterates something
>>>>> ​ for nest_depth=4 (which in this case would use l, m, n and o)​, or
>>>>> any other number (which can't be predicted)?
>>>>>
>>>>> cheers,
>>>>> Doug
>>>>>
>>>>> PS I didn't write this in Python just for speed, but feel free to
>>>>> reply in Python if you want - the practice would be good for me.
>>>>>
>>>>> _______________________________________________
>>>>> Edinburgh mailing list
>>>>> Edinburgh at python.org
>>>>> https://mail.python.org/mailman/listinfo/edinburgh
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Edinburgh mailing list
>>>> Edinburgh at python.org
>>>> https://mail.python.org/mailman/listinfo/edinburgh
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Edinburgh mailing list
>>> Edinburgh at python.org
>>> https://mail.python.org/mailman/listinfo/edinburgh
>>>
>>>
>>
>> _______________________________________________
>> Edinburgh mailing list
>> Edinburgh at python.org
>> https://mail.python.org/mailman/listinfo/edinburgh
>>
>>
>
> _______________________________________________
> Edinburgh mailing list
> Edinburgh at python.org
> https://mail.python.org/mailman/listinfo/edinburgh
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/edinburgh/attachments/20141118/2a5957ed/attachment-0001.html>


More information about the Edinburgh mailing list