Форум сайта python.su
py.user.nextПотому что идет в контексте лекций, где работа ведется только со списками. Спасибо за ответ. Буду разбираться!
Почему не предполагает?
Отредактировано KEKIs (Июнь 20, 2022 22:48:18)
Офлайн
KEKIsЗначит, надо без словаря делать, на одних списках.
Потому что идет в контексте лекций, где работа ведется только со списками.
KEKIsи предчувствие меня не обмануло#Способ 2, рабочий results = [(0, 3), (0, 10), (2, 3), (2, 2), (2, 4)] results = sorted(results, key=lambda x: x[1], reverse=True) results = sorted(results, key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True) print(results) #[(0, 10), (0, 3), (2, 4), (2, 3), (2, 2)]
>>> results = [(0, 3), (2, 3), (0, 14), (2, 10), (3, 5), (2, 4)] >>> results = sorted(results, key=lambda x: x[1], reverse=True) >>> results = sorted(results, key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True) >>> print(results) [(0, 14), (2, 10), (2, 4), (0, 3), (2, 3), (3, 5)] >>>
Отредактировано py.user.next (Июнь 21, 2022 04:13:24)
Офлайн
py.user.next
Это интересно…
Я сдавал в итоге код с такой сортировкой:
results = sorted(results, key=lambda x: x[1], reverse=True) results = sorted(results, key=lambda x: x[0]) results = sorted(results, key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True)
Отредактировано KEKIs (Июнь 22, 2022 13:42:57)
Офлайн
KEKIsА что будет, если там будет миллион оценок с идентификатором 0 ? Он для этого миллиона оценок будет миллион раз вычислять одну и ту же сумму? Надо переделать это.results = sorted(results, key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True)
KEKIsЕсли тебе понадобился дебаггер, значит ты делаешь что-то не то. В данном случае ты пытаешься неправильный код в три строчки натянуть на тесты. Это неправильный подход. Надо правильно писать программы. А правильная программа - это программа, в которой правильный код. Или ты думаешь, что программы пишутся для того, чтобы тесты проходить какие-то? Программы пишутся для того, чтобы работать потом годами. А работать они должны правильно и надёжно.
В дебагере не отражается процесс сортировки
Отредактировано py.user.next (Июнь 22, 2022 20:49:22)
Офлайн
py.user.next
Да я ж вроде вопрос не про это задал. Я хочу понять, как работает функция sorted и в какой момент она делает не то, что я ожидаю.
Я не спорю, что код не оптимальный, но мы вроде в топике Python для новичков. Естественно, я делаю какие-то ошибки, невозможно сразу научиться писать идеально.
И я не понимаю, почему ты думаешь, что я что-то на что-то натягиваю. Я написал, что вторая сортировка родилась не потому, что код неправильно работал, а потому что в проверке были требования к входным данным, которые не описаны в условии. Там нет ни слова про выводить студентов в порядке возрастания id при равенстве сумм баллов.
Буду признателен, если объяснишь, как залезть в работу sorted. То, что код написан по твоему мнению отвратительно, я уже понял, это можно не повторять.
Офлайн
KEKIsОн работает корректно на этом массиве потому, что тесты неправильные. В интерпретаторе питона без всяких тестов этот код явно неправильно работает.
Но в итоге все тесты он прошел и на массиве, который ты предлагаешь тоже работает корректно.
KEKIsОткрой исходники питона и там найди эту функцию.
Буду признателен, если объяснишь, как залезть в работу sorted.
Отредактировано py.user.next (Июнь 22, 2022 21:57:06)
Офлайн