Не сортируется массив в Python
Мне нужно отсортировать массив с несколькими математическими конструкциями при помощи самописного компаратора, но почему-то ни функция sort
ни функция sorted
не работают. При этом, это не зависит от компаратора, какой бы он ни был, результат один, порядок массива остается таким же, каким он был изначально. Еще стоит отметить, что почему-то не работает именно функция cmp_to_key
, потому что sort
с обычным ключом все сортирует, а с любым компаратором - нет. Я не знаю как это исправить.
from functools import cmp_to_key
import math
def compare_towers(t1, t2):
d = 1
p = 1
k = 1
for i in range(9, -1, -1):
if k + 1 / k > 10:
break
p = math.pow(d, p)
d = t2[i]
k = math.pow(t1[i], k) / d
if p > 99:
if k > 1.1:
return 1
if k < 0.9:
return 0
k = abs(k - 1) > 1e-10 and math.pow(k, p) or 1
return k > 1
def main():
n = int(input())
towers = []
for i in range(n):
k, *a_values = map(int, input().split())
towers.append(a_values + [1] * (9 - k) + [i])
towers.sort(key=cmp_to_key(compare_towers))
print(*sorted(towers, key=cmp_to_key(compare_towers)))
result = [tower[10] + 1 for tower in towers]
print(*result)
if __name__ == "__main__":
main()
При таком вводе в программу
10
4 2 2 2 2 2
1 2 2
1 3 2
1 2 3
3 2 2 2 2
2 2 2 2
1 3 3
3 3 3 3 3
2 4 3 3
2 2 3 4
Ожидаемый результат такой:
2 4 3 6 7 5 9 10 1 8
А выдается:
1 2 3 4 5 6 7 8 9 10
Ответы (1 шт):
Автор решения: zolars
→ Ссылка
Я понял, проблема в том, что компаратор должен возвращать числа, а не булеаны, заменил >
на -
- все заработало