按数百/个排序列表

时间:2018-10-26 21:22:11

标签: python python-3.x list sorting

我要对列表进行排序:

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

产生:

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

我该怎么办?

5 个答案:

答案 0 :(得分:2)

另一种对较长数字进行排序的方法是意识到您只是按反向数字进行排序。

styled-component

答案 1 :(得分:1)

如果您想按相反的顺序对数字进行排序,我想这是一个可以允许使用字符串进行比较的地方:

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

这提供了输出:

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

这里是IDEOne Link

答案 2 :(得分:0)

定义一个lambda函数以提取所需的数字,并将其用作排序键。例如:

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

基本上,这就是说使用一个数字然后是几百个数字的排序键对该列表进行排序。

答案 3 :(得分:0)

如果您可以输入长度为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)

答案 4 :(得分:0)

您可以使用商({{1)}和下限(%)运算符来定义排序键:

//

如果您可以使用第三方库,那么使用NumPy效率更高:

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]