Вы добавляете ненужную сложность псевдополиномиального времени, выполняя
a = max(list) + 1
for i in range(a):
...
и, таким образом, делая ненужные итерации.
Чтобы функция была линейной по размеру ввода, вы можете создать ассоциацию (т.е. , словарь element-> repetitions ) и затем взять элемент минимального значения, встречающийся чаще всего.
from collections import defaultdict
def mode(l):
# count occurrences (you could also use a Counter)
d = defaultdict(int)
for el in l:
d[el]+=1
# take the highest number of occurrences
highest_occurrences = max(d.values())
# return the element of minimum value with the highest number of occurrences
return min(el for el in d if d[el]==highest_occurrences)