Задача - написать функцию сортировки списка.
Текущее решение такое:
def sort(not_sorted_list: list) -> list:
	not_sorted_list = not_sorted_list[:]
	for _ in range(len(not_sorted_list)):
		for index, element in enumerate(not_sorted_list):
			try:
				next_element = not_sorted_list[index+1]
				currect_element = not_sorted_list[index]
				if next_element < currect_element:
					not_sorted_list[index] = next_element
					not_sorted_list[index+1] = currect_element
			except IndexError:
				break
	sorted_list = not_sorted_list[:]
	
	return sorted_list
data = [4, 354, 1, 4, 1, -10, 20]
sorted_list = sort(data)
print(data) # [4, 354, 1, 4, 1, -10, 20]
print(sorted_list) # [-10, 1, 1, 4, 4, 20, 354]
Проблема в следующем:
За один цикл:
for index, element in enumerate(not_sorted_list)
Полностью отсортировать список не выходит.
Для этого добавлен внешний цикл:
for _ in range(len(not_sorted_list)):
Но если брать именно длину списка, то цикл работает в холостую определенное количество циклов. В частности, даже при округленном 
длинна/1.5 сортировка завершается успешно.
Собственно вопрос в следующем - существует ли способ заранее понять, сколько итераций потребуется?
Если такого нет, что в принципе, ожидаемо, единственный вариант - сравнивать список "до" итерации и "после". Но в таком случае, не будет ли затраты на подобные сравнения "затратнее" холостых циклов?