В спортивном программировании (и зачастую на собеседованиях) стоит задача написать максимально эффективный код, оценивая его алгоритмическую сложность — то есть зависимость скорости работы программы от размера входных данных.
Условно говоря, если у тебя алгоритм обрабатывает 100 единиц данных за 1 секунду, то сколько секунд ему понадобится на 1000 единиц? В идеале — чтобы это было не 10 секунд, а, например, 3. Ещё бывает, что данных стало в 10 раз больше, а алгоритм обрабатывает их в 25 раз дольше. Вот это дурной знак.
В реальном программировании чаще всего на первое место ставится скорость разработки готового решения, отвечающего бизнес-требованиям, а не скорость самого алгоритма. То есть не страшно, если код работает немного медленнее — главное, чтобы он был сделан быстро. Из-за этого код бывает не очень эффективным. И ещё следует помнить, что чрезмерно эффективный код может быть хуже читаемым и поддерживаемым.
Но квадратичной сложности всё же лучше избегать.
Лёша Эльнатанов, наставник на курсе по Python