Double for loops in python

I am trying to get a list of file names in order. Sort of

files-1-loop-21 files-1-loop-22 files-1-loop-23 files-1-loop-24 files-2-loop-21 files-2-loop-22 files-2-loop-23 . . . and so on 

As for testing, I wrote python code as below:

code sample_1:

 for md in range(1,5): for pico in range(21,25): print md, pico 

This gives me a couple of numbers like:

  `1 21 1 22 1 23 1 24 2 21 2 22 2 23 2 24 3 21 3 22 3 23 3 24 4 21 4 22 4 23 4 24 

`

if i use:

code sample_2:

  for md in range(1,5): for pico in range(21,25): print "file-md-loop-pico" 

I get

  files-md-loop-pico files-md-loop-pico files-md-loop-pico files-md-loop-pico files-md-loop-pico files-md-loop-pico files-md-loop-pico 

How (sample_2 code) should be changed to get file lists as I wanted (as shown at the beginning of this post) in python?

Thanks in advance.

Hi

+6
source share
7 answers

Try the following:

 for md in range(1,5): for pico in range(21,25): print "file-{0}-loop-{1}".format(md, pico) 

Or:

 from itertools import product for md, pico in product(range(1,5), range(21,25)): print "file-{0}-loop-{1}".format(md, pico) 
+14
source

Use string formatting.

 print 'file-{0}-loop-{1}'.format(md, pico) 
+2
source

1) The scope of Python is determined by indentation . Your inner code should be indented correctly:

 for md in range(1,5): for pico in range(21,25): print "file-md-loop-pico" 

2) You use the string literal "file-md-loop-pico" instead of inserting the md and pico variables. To format a string correctly , use:

 for md in range(1,5): for pico in range(21,25): print "file-{0}-loop-{1}".format(md, pico) 
+2
source

one insert:

 print '\n'.join([('files-%d-loop_%d' %(i, j)) for i in xrange(1,5) for j in xrange(21,25)]) 
+2
source

The solution presented in other answers, with arguments surrounded by {}, is the right modern way to do this

 print'file-{0}-loop-{1}'.format{md,poco) 

There is an older way to do this, which you are likely to see, and this may make more sense if you are familiar with c or C ++ sprintf

 print'file-%d-loop-%d'%(md,poco) 

Documentation: http://docs.python.org/2/tutorial/inputoutput.html

+1
source

This solves the problem easily:

code:

 for md in range(1,5): for pico in range(21,25): print "file-%d-loop-%d"%(md,pico) 

Conclusion:

 file-1-loop-21 file-1-loop-22 file-1-loop-23 file-1-loop-24 file-2-loop-21 file-2-loop-22 file-2-loop-23 file-2-loop-24 file-3-loop-21 file-3-loop-22 file-3-loop-23 file-3-loop-24 file-4-loop-21 file-4-loop-22 file-4-loop-23 file-4-loop-24 
0
source
 for md in range(1,5,1): for pico in range(21,25,1): print ("file-" + str(md) +"-loop-" + str(pico) ) 
0
source

All Articles