Да, извиняюсь, ерунду написал) ближе к вечеру мозг уже не работает)
Дело было как раз в обратном. Сортировка инплейс осуществлялась не корректно, видимо потому, что в какой-то момент сортировка идет по частично отсортированному массиву

KEKIsЗвучит бредово.
Сортировка инплейс осуществлялась не корректно, видимо потому, что в какой-то момент сортировка идет по частично отсортированному массиву
#Способ 1, нерабочий results = [(0, 3), (0, 10), (2, 3), (2, 2), (2, 4)] results.sort(key=lambda x: x[1], reverse=True) results.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True) print(results) #[(0, 10), (2, 4), (0, 3), (2, 3), (2, 2)] #Способ 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.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True)
results = [(0, 3), (0, 10), (2, 3), (2, 2), (2, 4)] d = {} for i in range(len(results)): k, n = results[i] if k not in d: d[k] = sum(p[1] for p in results if p[0] == k) results[i] = (d[k], k, n) results.sort(key=lambda i: i[0], reverse=True) results = [(i[1], i[2]) for i in results] print(results)
KEKIs
Справедливости ради, мое решение прошло проверку
KEKIsтут скорее ошибка в том, что вы обращаетесь к списку во время его изменения
сортировка идет по частично отсортированному массиву
import random l =list(range(10)) random.shuffle(l) print(l) j = 0 def foo(i): global j, l j += 1 print(f"{j=}, {l=}") return i l.sort(key=foo) print(l)
KEKIs
Сортировка инплейс осуществлялась не корректно, видимо потому, что в какой-то момент сортировка идет по частично отсортированному массиву
KEKIsВ этой строке идёт два одновременных обращения к списку results. Так как метод list.sort() проводит сортировку в самом массиве, переставляя в нём элементы местами для временного хранения элементов, то при обращении к этому же массиву параллельно может происходить повторное обращение к одному и тому же элементу несколько раз. Так что код неправильный в любом случае.
Ну в целом вот тут появляется разница:... results.sort(key=lambda x: sum([k[1] for k in results if k[0] == x[0]]), reverse=True) ...
>>> lst = [3, 2, 1] >>> tmp = [] >>> >>> lst.sort(key=lambda i: (i, tmp.append([j for j in lst]))) >>> lst [1, 2, 3] >>> tmp [[], [], []] >>>
>>> lst = [3, 2, 1] >>> tmp = [] >>> >>> lst.sort(key=lambda i: (i, tmp.append(str(lst)))) >>> lst [1, 2, 3] >>> tmp ['[]', '[]', '[]'] >>>
>>> results = [(0, 3), (0, 10), (2, 3), (2, 2), (2, 4)] >>> results.sort(key=lambda x: x[1], reverse=True) >>> results.sort(key=lambda x: sum([k[1] for k in [] if k[0] == x[0]]), reverse=True) >>> results [(0, 10), (2, 4), (0, 3), (2, 3), (2, 2)] >>>
KEKIsПочему не предполагает?
а само задание не предполагает использование словарей