Эффективный и питонный способ сортировки целых чисел перед строками - PullRequest
0 голосов
/ 14 октября 2019

Итак, я хочу написать эффективную сортировку в Python 3, которая делает это:

x = ["aa", "5", 5, "12", 12]
x.sort(key=???)

print x  // prints  [5, 12, "12", "5", "aa"]

Он может представлять решения, но все они включают в себя динамическое построение объектов для каждого сравнения, и они не чувствуют себя питоническими. .

Здесь должен быть хороший план дизайна, я просто не рассматриваю ...

Ответы [ 2 ]

2 голосов
/ 14 октября 2019

Напишите ключ, который возвращает уникальное значение в зависимости от типа, а затем само значение. Я предполагаю, что вы хотели бы, чтобы float был также перед строками, поэтому предположим, что вы хотите, чтобы строки были последними, а все остальное - первыми.

def strings_last(x):
    """When sorting, ensure strings are last."""
    if isinstance(x, str):
        return 1, x
    else:
        return 0, x

x = ["aa", "5", 5, "12", 12]
sorted(x, key=strings_last)
# [5, 12, "12", "5", "aa"]
0 голосов
/ 14 октября 2019

Обратите внимание, что если вы все еще хотите использовать функцию cmp, вы можете преобразовать ее в функцию key, импортировав functools и вызвав functools.cmp_to_key с функцией cmp в качестве аргумента. Затем возвращенная функция key может быть предоставлена ​​для sort.

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