#python #python_3x #сортировка
Нужно отсортировать список координат (x, y, z) по двум параметрам: Весь список отсортирован по возрастанию координаты Z Кортежи с одинаковыми координатами Z в свою очередь сортируются по убыванию координаты Y На входе: [(3, 11, 14), (3, 9, 18), (3, 10, 10), (3, 11, 12), (3, 11, 10), (3, 10, 12), (3, 9, 14)] На выходе: [(3, 11, 10), (3, 10, 10), (3, 11, 12), (3, 10, 12), (3, 11, 14), (3, 9, 14), (3, 9, 18)] Код: from itertools import groupby result = [] coord = [(3, 11, 14), (3, 9, 18), (3, 10, 10), (3, 11, 12), (3, 11, 10), (3, 10, 12), (3, 9, 14)] for key, groups in groupby(sorted(coord, key=lambda z: z[2]), lambda z: z[2]): for group in sorted(groups, key=lambda y: y[1], reverse=True): result.append(group) print(result) # [(3, 11, 10), (3, 10, 10), (3, 11, 12), (3, 10, 12), (3, 11, 14), (3, 9, 14), (3, 9, 18)] Какие еще могут быть варианты решений?
Ответы
Ответ 1
Можно попробовать так: coord = [(3, 11, 14), (3, 9, 18), (3, 10, 10), (3, 11, 12), (3, 11, 10), (3, 10, 12), (3, 9, 14)] print(sorted(coord, key=lambda point: (point[2], -point[1])))
Комментариев нет:
Отправить комментарий