# Python: Insertion Sort

I am a beginner in python and to learn python I have written this program. How can this code be improved? Should I use main method in this program? Python

lst = []

def insertion_sort(thelist):
for index in range(1, len(thelist)):
key = thelist[index]
position = index - 1
while position >= 0 and thelist[position] > key:
thelist[position + 1] = thelist[position]
position = position - 1
thelist[position + 1] = key

n = int(input("Enter number of elements: "))
for i in range(0, n):
ele = int(input())
lst.append(ele)

insertion_sort(lst)
print(*lst, sep = ", ")


There is a much simpler method in Python to do an insertion sort using the bisect.insort method

import bisect
array = [1,3,5,7]
bisect.insort_left(array, 2)

>>[1, 2, 3, 5, 7]


With regard to your coding style, I would recommend using the if __name__ == "__main__" guard.

You can also just say for i in range(n) with no need to say (0, n)

You can also use list-comprehension to build the list:

import bisect
def insertion_sort(thelist):
new_list = []
for item in thelist:
bisect.insort_left(new_list, item)
return new_list

if __name__ == "__main__":
n = int(input("Enter number of elements: "))
lst = [input("Please enter a number: ") for i in range(n)]
new_list = insertion_sort(lst)
print(*new_list, sep = ", ")

• Try to make functions for every logical thing you do like getting the elements. use def get_input()

• Use if __name__ == "__main__" guard. It is a good practice when you are importing this program to another program, it will not run the code in this program entirely.

• There is no need to use a for loop for getting the list you can use split() on the entire input which would create a list as desired. It is pythonic to use split().

• There is no need to make n as lists in python are dynamic. You can get the length in O(1) time using len(lst).

• Name your variables clearly, slightly longer names are not a problem. lst would be input_list etc.

• You can use enumerate in for index in range(1, len(thelist)):. Which would give the index and elements of the list. More pythonic.