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

Я хочу отсортировать список :

[103, 302, 405, 204, 301, 105, 202, 303, 201, 404]

производить:

[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]

Как я мог это сделать?

Ответы [ 5 ]

0 голосов
/ 27 октября 2018

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

lst.sort(key=lambda x: str(x)[::-1])

Это обеспечивает вывод:

[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]

Вот ссылка IDEOne

0 голосов
/ 27 октября 2018

Еще один способ сортировки длинных чисел - понять, что вы просто сортируете по обратному номеру.

sorted(L, key=lambda x: str(x)[::-1])
0 голосов
/ 27 октября 2018

В случае, если у вас могут быть числа, отличные от 3, и / или это не обязательно должны быть нули в середине:

def myFunc(n):
  x = ''
  while n:
    x = x + str(n % 10)
    n = (n - n % 10) // 10
  return int(x)

cars = [103, 302, 405, 204, 301, 105, 202, 303, 201, 404]

cars.sort(key=myFunc)

print(cars)
0 голосов
/ 27 октября 2018

Вы можете использовать частное (%) и операторы деления по полу (//) для определения ключа сортировки:

L = [103, 302, 405, 204, 301, 105, 202, 303, 201, 404]

res = sorted(L, key=lambda x: (x % 10, x // 100))

[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]

Если вы можете использовать стороннюю библиотеку, это более эффективно с NumPy:

import numpy as np

A = np.array([103, 302, 405, 204, 301, 105, 202, 303, 201, 404])

res = A[np.lexsort((A // 100, A % 10))]

array([201, 301, 202, 302, 103, 303, 204, 404, 105, 405])
0 голосов
/ 27 октября 2018

Определите лямбда-функцию, чтобы извлечь нужные цифры и использовать ее в качестве ключа сортировки.Например:

list = [103, 302, 405, 204, 301, 105, 202, 303, 201, 404]
result = sorted(list, key=lambda x: ((x % 10), (x / 100 % 10)))

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

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