【发布时间】:2018-10-26 21:22:11
【问题描述】:
我想对一个列表进行排序:
[103, 302, 405, 204, 301, 105, 202, 303, 201, 404]
生产:
[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]
我该怎么做?
【问题讨论】:
-
几十个呢?
标签: 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]
我该怎么做?
【问题讨论】:
标签: python python-3.x list sorting
另一种对较长数字进行排序的方法是意识到您只是按倒序的数字进行排序。
sorted(L, key=lambda x: str(x)[::-1])
【讨论】:
如果您想按相反顺序对数字进行排序,我会说这是一个可以宽恕使用字符串进行比较的地方:
lst.sort(key=lambda x: str(x)[::-1])
这提供了输出:
[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]
【讨论】:
定义一个 lambda 函数以提取您想要的数字,并将其用作排序键。例如:
list = [103, 302, 405, 204, 301, 105, 202, 303, 201, 404]
result = sorted(list, key=lambda x: ((x % 10), (x / 100 % 10)))
这基本上是说使用排序键排序这个列表,然后是百位数字。
【讨论】:
如果您可以有 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)
【讨论】:
您可以使用商 (%) 和除法 (//) 运算符来定义排序键:
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]
如果您可以使用第 3 方库,那么使用 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])
【讨论】: