繁体   English   中英

以特定格式对字符串或整数数组进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM