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 = ", ")
2 Answers 2
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 thelist
you can usesplit()
on the entire input which would create a list as desired. It is pythonic to usesplit()
.There is no need to make
n
as lists in python are dynamic. You can get the length inO(1)
time usinglen(lst)
.Name your variables clearly, slightly longer names are not a problem.
lst
would beinput_list
etc.You can use
enumerate
infor index in range(1, len(thelist)):
. Which would give theindex
and elements of the list. More pythonic.