#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])))
Комментариев нет:
Отправить комментарий