Лямбда-сортировка: по нескольким элементам - PullRequest
0 голосов
/ 17 октября 2019

Я хочу отсортировать: список кортежей должен быть отсортирован по нескольким элементам в массиве.

Входной массив кортежей должен быть отсортирован по нескольким элементам в массиве. Для некоторых индексов его нужно отсортировать в неубывающем порядке: (обозначено 0), а для других - в неубывающем mder (обозначено 1) В редакторе ниже. вам нужно написать лямбда-функцию для достижения того же.

Взять, к примеру. входной массив будет arr = [(1,2,3),(3,2,1),(4,2,1), (6,4,3)] с числом элементов n=4 и количеством элементов в каждом кортеже m = 3. Пусть входные индексы, по которым этот массив должен быть отсортирован, равны indices =[(2,0), (O, 1)], а длина равна k = 2. Это означает, что нам нужно отсортировать наш массив на основе индекса 2 в неубывающем порядке, а затем на основе индекса 0 в неубывающем порядке. Первый. сортировка по index 2 в неубывающем порядке: мы получаем [(3,2,1),(4,2,1),(1,2, 3),(6,4,3)], а затем, сортировка по index 0 в неубывающем порядке, получаем [(4,2,1),[3,2,1),(6,4,3),(1,2,3)].

Примечание:

Вам необходимо реализовать устойчивую сортировку, т.е. в случае связи между элементами в позиции i,j, такой, что i<=j, а затем позиция в отсортированном массиве для этих элементов будет fi,fj, затем fi<=fj.

* 1022. * Описание функции:

Завершите функцию indexSort в редакторе ниже. Вам просто нужно написать лямбда-функцию, необходимую для этого.

arr[arr[0],....arr[n-1]]: массив индексов кортежей: массив кортежей из двух элементов

Пример 1:

arr=[(1,2,3),(3,2,1),(4,2,1), (6,4,3)]
indices=[(2,0), (O, 1)]
Output: [(4,2,1),[3,2,1),(6,4,3),(1,2,3)]

Объяснение:

  • Сортировать по index 2 в порядке убывания: [(3,2,1),(4,2,1),(1,2,3),(6,4,3)]
  • Сортировать по index 0 в порядке возрастания: [(4,2,1),(3,2,1),(6,4,3),(1,2,3)]

1 Ответ

0 голосов
/ 17 октября 2019

Эта проблема предполагает, что вы напишите функцию lambda для получения ключей, используемых для сортировки списка кортежей. Это не так сложно сделать, основываясь на параметре indicies для внешней функции. Я бы использовал понимание списка с отрицательными значениями для индекса, если второе значение в признаках ненулевое:

def indexSort(arr, indicies):
    arr.sort(key=lambda tup: [tup[i] if d == 0 else -tup[i] for i, d in indicies])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...