Python:按特殊顺序对数字进行排序
Python: Sorting numbers in special order
我需要定义一个用于比较的函数和另一个用于排序的函数。
First func - rank(x):
Input: rank(x1) > rank(x2)
Output: True/False
比较是根据整数x中'1'的个数进行比较,与位数无关,因此,111 > 999991。如果1的个数相同,则比较下一个高位数字,(即2 的数量,然后是 3 的数量...)等等(例如 9321 > 14249)。
如果两个数的位数相同,则进行普通整数比较 987>789.
Second func - sort(values):
Input: sort(n1,n2,n3,n4..)
Output: (values in ranking of the above mentioned order)
简单地使用rank(x)。
def sort(values):
return sorted(values, key=rank)
例子
input: sort([12, 91, 81, 49, 1111, 7, 37, 9999, 777])
output: [9999, 7, 777, 49, 37, 91, 81, 12, 1111]
input: sort([1234, 4321, 3214, 2413])
output: [1234, 2413, 3214, 4321]
我卡在了 return 应该代表 rank(x) 的地方。我猜我应该 return 一个比较值。
我的想法是从创建每个 x 的元组开始,先转换为字符串,然后再转换为列表。但是,没有关于如何继续的具体想法。
L=[]
for i in values:
L.append(tuple(sorted(str(i),reverse=True)))
print(L)
由于长度不同导致低于 returns 的错误
def rank(x):
return x[0], x[1], x[2]
sorted(L, key=rank)
这是一个可能的解决方案:
sorted(inp, key=lambda x: tuple((*(str(x).count(str(i)) for i in range(1,10)), x)))
基本上,rank(x)
函数创建一个元组,其中第 i 个元素等于 x
中的 (i+1) 位数。元组的第 9 个元素包含 x
本身。例如:
x = 1456556
rank(x) = (1, 0, 0, 1, 3, 2, 0, 0, 0, 1456556)
之后,使用元组的标准比较。
我需要定义一个用于比较的函数和另一个用于排序的函数。
First func - rank(x):
Input: rank(x1) > rank(x2)
Output: True/False
比较是根据整数x中'1'的个数进行比较,与位数无关,因此,111 > 999991。如果1的个数相同,则比较下一个高位数字,(即2 的数量,然后是 3 的数量...)等等(例如 9321 > 14249)。 如果两个数的位数相同,则进行普通整数比较 987>789.
Second func - sort(values):
Input: sort(n1,n2,n3,n4..)
Output: (values in ranking of the above mentioned order)
简单地使用rank(x)。
def sort(values):
return sorted(values, key=rank)
例子
input: sort([12, 91, 81, 49, 1111, 7, 37, 9999, 777])
output: [9999, 7, 777, 49, 37, 91, 81, 12, 1111]
input: sort([1234, 4321, 3214, 2413])
output: [1234, 2413, 3214, 4321]
我卡在了 return 应该代表 rank(x) 的地方。我猜我应该 return 一个比较值。 我的想法是从创建每个 x 的元组开始,先转换为字符串,然后再转换为列表。但是,没有关于如何继续的具体想法。
L=[]
for i in values:
L.append(tuple(sorted(str(i),reverse=True)))
print(L)
由于长度不同导致低于 returns 的错误
def rank(x):
return x[0], x[1], x[2]
sorted(L, key=rank)
这是一个可能的解决方案:
sorted(inp, key=lambda x: tuple((*(str(x).count(str(i)) for i in range(1,10)), x)))
基本上,rank(x)
函数创建一个元组,其中第 i 个元素等于 x
中的 (i+1) 位数。元组的第 9 个元素包含 x
本身。例如:
x = 1456556
rank(x) = (1, 0, 0, 1, 3, 2, 0, 0, 0, 1456556)
之后,使用元组的标准比较。