Lists

Jason Stokes jstok at bluedog.apana.org.au
Tue Apr 18 12:41:56 EDT 2000


Daley, MarkX wrote in message ...
>This feels like a real newbie question, but here is the code that is
causing
>my question:
>
># Learning exceptions
>
>def test():
>    a = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
>    print a
>    b = 5
>    for item in a:
>       try:
>           print b / a[item]
>       except ZeroDivisionError:
>           pass


Firstly, please retain correct indenting when posting code snippets.
Indenting is significant in Python.  I've corrected it for you.

>Why is the list being processed in reverse?  The exception works fine, but
>the math is backwards.  I don't recall this happening before.


Iteration one binds to the name item the first element of a, which happens
to be -5.

You then try to divide b by a[item], which is a indexed by -5.  Negative
indexes are legal in python and the effect is to return a reference to the
fifth element from the *right*.

In short, you've misapplied "for item in a" construct, which is very
different from the C construct.  In Python it repeatedly binds the name
"item" to the next element of list "a", does the sub-block, then repeats
until there's no longer any elements left in a.   You don't need to index a.
To do that, you'd do:

for i in range(0...len(a)):
   try:
       print b / a[i]
   except ZeroDivisionError:
      pass

But this will mark you with the stigma of a programmer hankering for his old
C days.... what you needed to write was merely:

for item in a:
   try:
       print b / item
   except ZeroDivisionError:
      pass

Cheers,
Jason Stokes: jstok at bluedog.apana.org.au





More information about the Python-list mailing list