Сортировка списка строк определенным методом - PullRequest
0 голосов
/ 21 декабря 2018

допустим, у меня есть список таких строк

L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23', ....]

Как мне отсортировать этот список, чтобы у меня было что-то вроде этого:

L = ['1', '2', '3','4', '5', '2 3 5', '2 4 8', '5 22 1 22', ' 5 22 1 23', '5 22 1 37', ...]

в основном мне нужноупорядочить список по первому другому числу между 2 строками

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Немного другой подход, чем у @ Даниэля.

idx = sorted(range(len(L)), key=lambda i: int(''.join(L[i].split())))
L = [L[i] for i in idx]

вывод

['1',
 '2',
 '3',
 '4',
 '5',
 '2 3 5',
 '2 4 8',
 '5 22 1 22',
 '5 22 1 23',
 '5 22 1 37']
0 голосов
/ 21 декабря 2018

Вы можете отсортировать, используя кортеж:

L = ['5', '3', '4', '1', '2', '2 3 5', '2 4 8', '5 22 1 37', '5 22 1 22', '5 22 1 23']

result = sorted(L, key=lambda x: (len(x.split()),) + tuple(map(int, x.split())))

print(result)

Вывод

['1', '2', '3', '4', '5', '2 3 5', '2 4 8', '5 22 1 22', '5 22 1 23', '5 22 1 37']

Идея состоит в том, чтобы использовать в качестве ключа кортеж, где первый элемент являетсяколичество чисел в строке, а остальное - кортеж чисел.Например, для '2 3 5' ключом является (3, 2, 3, 5)

. Как предлагает @ PM2Ring, вы можете использовать функцию def вместо lambda:

def key(x):
    numbers = tuple(map(int, x.split()))
    return (len(numbers),) + numbers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...