"list index out of range" error

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Wed Sep 20 23:54:49 CEST 2006

In <1158787569.955853.223030 at h48g2000cwc.googlegroups.com>, sam wrote:

> i'm trying to code a version of a selection sort and the heart of the
> code is as follows (no_lines is simply the number of items to be
> sorted, read out of an input file):
> for j in range(0, no_lines):
>     k = 0
>     while k < no_lines:
>         sorted_check = 0
>         if list_initial[k] < list_initial[k+1]:
>             temp_str = list_initial[k]
>         elif list_initial[k] == list_initial[k+1]:
>             temp_str = list_initial[k]
>         elif list_initial[k] > list_initial[k+1]:
>             temp_str = list_initial[k+1]
>             sorted_check = 1
>         k += 1
>     list_initial.remove(temp_str)
>     list_final.append(temp_str)
>     no_lines -= 1
>     if sorted_check == 0:
>         break
> problem is, i keep getting a "list index out of range" error. i've had
> this problem before in different contexts with lists in loops.
> i thought i had it cracked when it occurred to me that i needed to
> decrement no_lines to take into account that list_initial was shrinking
> as i deleted sorted items, but i still got the same error. it's
> probably something trivial, but i can't seem to get round it by using
> while loops, and i had the same problem with cmp(), hence the explicit
> comparison above, which still doesn't work. can anyone help a beginner
> out with this?

It has nothing to do with `cmp()` vs. explicit testing but with indexing
the `k+1` element.  Let's assume `no_lines` is 10 then the elements have
the indexes 0 to 9.  Within the while loop `k` is incremented and the loop
body is executed as long as `k < 10`.  When `k == 9` you try to access the
element at index `k+1`, but there is no element at index 10.  So you get
the `IndexError`.

	Marc 'BlackJack' Rintsch

More information about the Python-list mailing list