Сортировка кортежей с динамическими значениями и длиной - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь отсортировать числовые кортежи по двум аргументам:

  • первый аргумент, длина кортежа: чем меньше кортеж, тем лучше;
  • второй аргумент, n-ое значение кортежа: если два кортежа имеют одинаковую длинузатем их следует упорядочить по первому числовому значению, на которое они отличаются

Например, предположим, у нас есть эти четыре кортежа:

    a = (2, 5)           # len(a) == 2
    b = (2, 5, 3)        # len(b) == 3
    c = (2, 4, 3)        # len(c) == 3
    d = (1, 4, 4, 8)     # len(d) == 4

В результате я хочу получить функцию, которая поможет мне отсортировать эти кортежи так, чтобы:

  • a - первый кортеж (самый маленький)
  • b и c следует (средние)
  • d - последний кортеж (самый длинный)
  • , поскольку b и c оба имеют одинаковую длину, они должны быть упорядочены так, чтобы c предшествовал b, поскольку, хотя их первое значение одинаково, вторые значения c меньше, чем b

Следовательно, четыре кортежа выше должны быть указаны как [a, c, b, d].

Вопрос: как мне это сделать, зная, что кортежи не имеют фиксированной длины и могут различаться при любом значении от первого до последнего?

1 Ответ

0 голосов
/ 25 сентября 2018

Вы можете сортировать кортежи с помощью ... tuples:

res = sorted([a, b, c, d], key=lambda x: (len(x), x))

# [(2, 5), (2, 4, 3), (2, 5, 3), (1, 4, 4, 8)]

Ключом является аргумент key, который использует анонимную (lambda) функцию.Python сортирует кортежи по элементам.Таким образом, первый элемент len(x) отдает приоритет длине кортежа.Второй элемент x придает второстепенное значение сортировке по самому кортежу, который сам по себе выполняется поэлементно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...