Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Сортировка списка по двум параметрам

#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])))

Комментариев нет:

Отправить комментарий