【问题标题】:Sort an array of string or integers in a specific format以特定格式对字符串或整数数组进行排序
【发布时间】:2020-11-30 09:38:40
【问题描述】:

我需要按以下形式对数组进行排序:

输入 [904、917、945、998、9、82、43、1112、99、97、93]

输出 [9、99、998、97、945、93、917、904、88、32、1112]

排序规则是(最大第一个数字,最大第二个数字,最大第三个数字,......),如果发生冲突,将保留较小的长度数字。

例如。在 9 和 998 中,9 会排在第一位,因为第一位数字相同,但位数较少。

如果我可以将逻辑应用为 Python 中排序功能的键,那就太好了。

更新

我实际上是想在 Leetcode 上解决这个问题: https://leetcode.com/problems/largest-number/

为了解决这个问题,我需要我修改过的那种排序函数来最终解决这个问题:

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)

【问题讨论】:

  • 到目前为止你尝试过什么?什么没有解决这个问题?具体一点。
  • 输入和输出列表甚至没有相同的整数。
  • @Jab 是的,我更正了。
  • @GreenCloakGuy 我什么都没尝试,我一直在寻找实现这种排序的最快和最干净的方法

标签: python arrays python-3.x list sorting


【解决方案1】:

有点老套,但这是你要找的吗?

sorted(yourlist, key=lambda x: ''.join([str(9-int(y)) for y in str(x)]))

【讨论】:

  • 不需要转换回字符串。 lambda x: [9-int(y) for y in str(x)]
  • @wjandrea 那么9 也不是。
  • 是的,这就是我想要的,但是@A.Tangs 的解决方案比这个快 4 倍。
【解决方案2】:

您可以定义一个名为 spec_sort 的函数:

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)

输出应该是:

[9, 99, 998, 97, 945, 93, 917, 904, 82, 43, 1112]

【讨论】:

  • 谢谢,效果很好,我修改了你的函数来解决实际问题。
猜你喜欢
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多