Лучшая оптимизация всего этого - избежать такой глупости, как принятие «либо списка, либо отдельного элемента» в качестве аргумента. Но, если вы настаиваете, лучше использовать try / кроме того, чтобы удалить аномалию как можно скорее и сделать то, что обязательно будет повторяемым:
try: iter(list_or_elem)
except TypeError: iterable = [list_or_elem]
else: iterable = list_or_elem
y = max(y, *iterable)