looking for a neat solution to a nested loop problem
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Mon Aug 6 21:27:07 EDT 2012
On Mon, 06 Aug 2012 19:16:45 +0200, Tom P wrote:
>> def my_generator():
>> yield 9
>> yield 100
>> for i in range(200, 250):
>> yield i
>> yield 5
>>
>>
> Thanks, I'll look at that but I think it just moves the clunkiness from
> one place in the code to another.
And if there was a built-in command that did exactly what you wanted, it
too would also move the clunkiness from one place in the code to another.
What you are asking for is clunky:
[quote]
j runs through range(M, 100) and then range(0,M), and
i runs through range(N,100) and then range(0,N)
[end quote]
There's no magic pixie dust that you can sprinkle on it to make it
elegant. Assuming M and N are small (under 100), you can do this:
values = range(100) # or list(range(100)) in Python 3.
for j in (values[M:] + values[:M]):
for i in (values[N:] + values[:N]):
...
which isn't too bad. If you have to deal with much large ranges, you can
use itertools to chain them together:
import itertools
jvalues = itertools.chain(xrange(M, 1000000), xrange(M)) # or just range
ivalues = itertools.chain(xrange(N, 2500000), xrange(N)) # in Python 3
for j in jvalues:
for i in ivalues:
...
--
Steven
More information about the Python-list
mailing list