iterating over lists

Malcolm Tredinnick malcolm at commsecure.com.au
Sat Jun 2 12:59:50 EDT 2001


On Sat, Jun 02, 2001 at 10:04:06AM -0500, John Hunter wrote:
> I have three lists of equal size: list1, list2 and list3.
> 
> What I want but doesn't work:
> 
>   for (x1, x2, x3) in (list1, list2, list3):
>      print x1, x2, x3
> 
> I know I can do it by keeping a index count variable: 
> 
>      N = len(list1)
>      for i in range(1,N):
>          print list1[i], list2[i], list3[i]
> 
> but am wondering if there is way to create a tuple of named variables
> as in the (x1, x2, x3) example above.

This does what you want:

	for x1, x2, x3 in map(None, list1, list2, list3):
		print x1, x2, x3
	
(a nice use of map to remember).

> One final question:  If I do:
> 
>      for i in range( 1, len(list1) ):
>          print list1[i], list2[i], list3[i]
> 
> I assume the len(list1) call will only be evaluated once.  Is this
> correct?

Yes, that's correct. You can check this by doing something like:

	l = [1, 2, 3]
	for i in range(len(l)):
		l.append(i)
		print i

and notice that it only goes through 3 times, despite the growth in
len(l).

Cheers,
Malcolm

-- 
A day without sunshine is like, night.




More information about the Python-list mailing list