enumerate() question

Diez B. Roggisch deets at nospam.web.de
Mon May 22 10:36:50 EDT 2006


Gregory Petrosyan wrote:

> Hello!
> I have a question for the developer[s] of enumerate(). Consider the
> following code:
> 
> for x,y in coords(dots):
>     print x, y
> 
> When I want to iterate over enumerated sequence I expect this to work:
> 
> for i,x,y in enumerate(coords(dots)):
>     print i, x, y
> 
> Unfortunately, it doesn't  =(  and I should use (IMHO) ugly
> 
> for i,pair in enumerate(coords(dots)):
>     print i, pair[0], pair[1]
> 
> So, why enumerate() works this way and is there any chance of changing
> the behaviour?

It works that way because enumerate returns a tuple - index, value. And it
doesn't care what is inside value. Actually, it can't - how would you then
write something like this?

l = [1, ('a', 'tuple'), 3]

for i, value in enumerate(l):
    print i, value


But your problem can be solved in an elegant fashion anyway. When *you* know
the structure of the values (and who else does?), you can simply use nested
sequence unpacking:

for i, (x, y) in enumerate(coords):
    pass

HTH,

Diez




More information about the Python-list mailing list