[英]Sort an array of string or integers in a specific format
我需要按以下形式对数组进行排序:
输入[904, 917, 945, 998, 9, 82, 43, 1112, 99, 97, 93]
Output [9, 99, 998, 97, 945, 93, 917, 904, 88, 32, 1112]
排序规则是(最大第一个数字,最大第二个数字,最大第三个数字,...),如果发生冲突,将保留较小的长度数字。
例如。 在 9 和 998 中,9 会排在第一位,因为第一位数字相同,但位数较少。
如果我可以将逻辑应用为对 Python 中的 function 进行排序的关键,那就太好了。
更新
我实际上是想在 Leetcode 上解决这个问题: https://leetcode.com/problems/largest-number/
为了解决这个问题,我需要这种排序 function ,我对其进行了修改以最终解决这个问题:
nums = [904, 917, 945, 998, 9, 82, 43, 1112, 99, 97, 93]
nums = [str(i) for i in nums]
n = max(map(len,nums))
nums = sorted(nums, key = lambda x : (x.ljust(n,x[0]), x[-1]), reverse=True)
有点hacky,但这是你要找的吗?
sorted(yourlist, key=lambda x: ''.join([str(9-int(y)) for y in str(x)]))
您可以定义一个名为 spec_sort 的 function:
def spec_sort(l):
l_str=map(str,l)
n=max(map(len,l_str))
return sorted(l,key=lambda i:(str(i).ljust(n,'a')),reverse=True)
这是一个例子:
i=[904, 917, 945, 998, 9, 82, 43, 1112, 99, 97, 93]
spec_sort(i)
output 应该是:
[9, 99, 998, 97, 945, 93, 917, 904, 82, 43, 1112]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.