I came across this code on selection sort algorithm:
ls = [2, 5, 1, -9, 10, 13, 7, 2]
def selection_sort(ls):
for i in range(len(ls)):
imin = min(range(i,len(ls)), key = lambda x: ls[x])
ls[i], ls[imin] = ls[imin], ls[i]
I know the typical selection_sort with the if block, but this one is hard to understand. I tried to print imin
with all possible i's and the result was 33337777 which doesn't make sense to me. I think my problem is that I don't know how this specific key works. Does anyone have any insight on this?
function declaration
The statement is the function definition, Which takes one argument i.e. list
def selection_sort(ls):
Loop Initialization
A for-loop
is defined that will iterate the list from i = 0 to the len(ls)
.
for i in range(len(ls)):
Inside the for-loop
, there are 2 statements
imin = min(range(i,len(ls)), key = lambda x: ls[x])
The above code uses python's min function taking 2 arguments, an iterator and a function to find the minimum value from the list starting from index i
to len(ls)
and return the item's index using the lambda function passed as the second argument.
ls[i], ls[imin] = ls[imin], ls[i]
The above code is responsible for swapping the minimum item with the item at the index i of the list.