В реальности их десятки. Потому что "XL", "52", "50-54" и далее везде могут описывать буквально одну и ту же шмоть.
Вообще, прежде, чем обсуждать алгоритм сортировки размеров в каждом конкретном случае, стоит попытаться составить их список и подсунуть его для сортировки товароведу. И вот только когда он родит то, как оно должно выглядеть со стороны работающих с этими размерами - тогда и алгоритмизировать.
Сергей П, мне стоит душнить и говорить что во-первых O(n) не всегда больше O(1) [потому что O-нотация показывает рост, а не факт времени], а во вторых, учитывая константный список из 4 элементов, сложность будет всё ещё O(1) [ведь роста нет]?
Но со словарём, конечно, будет в среднем лучше:
spoiler
In [1]: list_key = ["M", "L", "XL", "XXL"].index
In [3]: idx = {s: i for i, s in enumerate(["M", "L", "XL", "XXL"])}
In [4]: dict_key = idx.get
In [5]: %timeit list_key("XXL")
41.4 ns ± 0.0398 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
In [6]: %timeit dict_key("XXL")
28.6 ns ± 0.0696 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
In [7]: %timeit list_key("M")
22.5 ns ± 0.0124 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
In [8]: %timeit dict_key("M")
27.6 ns ± 0.0402 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
In [9]: %timeit sorted(['L', 'M', 'XL', 'XXL'], key=list_key)
226 ns ± 0.687 ns per loop (mean ± std. dev. of 7 runs, 1,000,000 loops each)
In [10]: %timeit sorted(['L', 'M', 'XL', 'XXL'], key=dict_key)
185 ns ± 0.046 ns per loop (mean ± std. dev. of 7 runs, 10,000,000 loops each)
Roman K, да почему же "душнить"? Замечание резонное, но ресурс наш про обучение и развитие, а не готовые ответы на все случаи жизни, поэтому затронуть тему в любом случае полезно.
Кто-то же может это решение попробовать перенести на другой пример, где перечень возможных "атомов" побольше и может расти. Навскидку, к примеру, это может быть номенклатура типоразмеров каких-нибудь деталей, которые хотелось бы где-то перечислять в отстортированном по некоторой шкале порядке.
Неплохо бы иметь привычку выбирать более эффективное решение даже когда это не существенно скажется на производительности. Главное, что решение со словарём не слишком усложняет исходный код, позволяет реализовать механизм сортировки достаточно изолированным, а расширение перечня размеров в линейке не потребует модификации кода в большом количестве мест.
Если у человека вызывает вопросы такая простая задача. значит человек учится. Если человек учится, то хорошо бы помимо простого решения давать ещё и эффективное и показывать в чем разница. Ну а в жизни иметь привычку делать сразу хорошо, если это не намного дольше и сложнее, чем как попало -- это иметь хорошую привычку.