Сортировка списка

354 просмотра
0
0 Комментариев

Есть список:
a = [‘0 10.0.41.161’, ‘2 10.3.4.59′, ’10 10.8.33.6’, ‘3 10.3.4.155′ ’20 10.3.4.75′, ’16 10.3.4.134’]

Как отсортировать список по данным 0, 2, 10, 3, 20, 16? Метод [l for l in sorted(a)] не формирует как нужно.


Добавить комментарий

4 Answers

Python Опубликовано 12.12.2018
0

sorted(a, key=lambda x : x[:x.index(' ')])

если хотите лексикографически отсортировать, а если как числа, то

sorted(a, key=lambda x : int(x[:x.index(' ')]))

Добавить комментарий
0

sorted по умолчанию будет сортировать как строки. а то, что там есть пробелы и цифры…
поэтому, определяем новую функцию

def mycmp(x,y):
    return int(x.split(' ')[0]) - int(y.split(' ')[0])

писано от руки, поэтому, может быть не на столько эффективно, но рабочее. Эта функция должна возвращать 0, если элементы равные, минус — если порядок неверный. Я просто делаю split по пробелу и извлекаю первый элемент.
а вот так теперь нужно сортировать
r = sorted(a, mycmp)

если нравятся лямбды, нет проблем
sorted(a, lambda x,y: int(x.split(‘ ‘)[0]) — int(y.split(‘ ‘)[0]))

Добавить комментарий
0

Как отсортировать список по данным 0, 2, 10, 3, 20, 16?

Вам нужна сортировка в произвольном порядке что-ли?

order = ('0', '2', '10', '3', '20', '16')
sorted(a, key=lambda i: order.index(i.split(' ')[0]) )

Добавить комментарий
0

Если требуется упорядочить список a в арифметическом порядке:

a = ['0 10.0.41.161', '2 10.3.4.59', '10 10.8.33.6', '3 10.3.4.155', '20 10.3.4.75', '16 10.3.4.134']

, по первым значащим символам строк, входящим в список, т.е. по символам ‘0’, ‘2’, ’10’, ‘3’, ’20’, ’16’, то допустимо следующее решение с использованием функции вида:

def order(a, b):
    if int(a[:a.index(' ')]) > int(b[:b.index(' ')]):
            return 1
    elif int(a[:a.index(' ')]) < int(b[:b.index(' ')]):
            return -1
    elif int(a[:a.index(' ')]) == int(b[:b.index(' ')]):
            return 0

В этом случае

b = sorted(a, cmp = order)

возвращает отсортированный список b со значением:

['0 10.0.41.161', '2 10.3.4.59', '3 10.3.4.155', '10 10.8.33.6', '16 10.3.4.134', '20 10.3.4.75']

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up