Selection Sort Algorithm Python
<p>Working on implementing this algorithm using Python. I thought my logic was okay but apparently not as Python is complaining. The while loop is causing issues. If I remove that it works as expected but obviously doesn't sort the whole list. My thought process -> Use Linear Search to find the smallest number -> Append that new number to a list -> Remove that number from the current list -> Loop through that same list (but with smallest number removed) again -> Repeat process until we've gone through the entire list "x" number of times. "x" being equal to the length of the list. The problem I think I'm running into is that the list never gets updated every time I run through the for loop? I keep getting the error <code>Line 21: ValueError: list.index(x): x not in list</code>. 
Even though "x" is in the list. Any idea as to what I'm doing wrong?</p>

<pre><code>"""
Selection sort algorithm.
"""

import random
ls = []
max_number = 10
while len(ls) &lt; max_number:
    ls.append(random.randint(1,101))
print ls   

def selection_sort(items_to_sort):
    smallest_number = items_to_sort[0]
    current_number = 0
    sorted_items = []
    item_len = len(items_to_sort)
    while item_len &gt; 0:
        for item in items_to_sort[:]:
            if item &lt; smallest_number:
                smallest_number = item
        items_to_sort.pop(items_to_sort.index(smallest_number))    
        sorted_items.append(smallest_number)   
        item_len -= 1    
    return sorted_items
print selection_sort(ls)
</code></pre>

<p>It looks like <strong>you're not re-initializing</strong> the <code>smallest_number</code> variable, so after the first execution of your <code>while</code> loop - you look for a value smaller than the previous value which you just <code>pop</code>ed from the list.</p>

<p>When you don't find a value smaller than the previously smallest value which is no longer in the list, you try to <code>pop</code> the same <code>smallest_number</code> as in the previous iteration of the <code>while</code> loop. However, that value is no longer in the <code>items_to_sort</code> list which is why you get the <code>ValueError</code></p>

<p>Try moving the line <code>smallest_number = items_to_sort[0]</code> to be the first line executed in every iteration of your <code>while</code> loop.</p>

python algorithm list sorting