[Tutor] smarter way of looping

Alan Gauld alan.gauld at freenet.co.uk
Thu Jan 26 15:18:25 CET 2006


> I often do a loop over arbitrary number of sequences. I do it like this:
>
>for elem1 in seq1:
>    for elem2 in seq2:
>        do whatever seq1,seq2
>
> this isn`t nice I think.

Actually its pretty common and not that ugly.
But...

> myiterator=geniousfunction(seq1,seq2,seq3)
>
> and then myiterator.next()  and have it return the corresponding elemnts
> from all sequences

The problem is that there are so many different ways you can do that.
Python offers several options but none of them solve all the cases.

Look at the documentation for

List Comprehensions
zip()
map()
filter()
reduce()

> seq1 = ['a','b']
> seq2 = [1,2]
> a 1
> a 2
> b 1
> b 2

[a,b for a in seq1 for b in seq2]

> how do you loop over all the elements that can be returned by
> myiterator?

return the options as a list of tuples and then use the usual list iteration 
techniques.

for elem in [a,b for a in seq1 for b in seq2]:
    # use elem here

HTH

Alan G
Author of the learn to program web tutor
http://www.freenetpages.co.uk/hp/alan.gauld




More information about the Tutor mailing list