【问题标题】:Working of python's sort keypython的排序键的工作
【发布时间】:2017-11-27 09:17:05
【问题描述】:
class Solution(object):
    def moveZeroes(self, nums):
        nums.sort(key =lambda x : 1 if x == 0 else 0)
        return nums

我的函数如上所示。 我似乎不明白代码key =lambda x : 1 if x == 0 else 0 是如何工作的。

我还尝试将 lambda 函数更改为:

def getKey(item):
    if item == 0:
        return 1
    else:
        return 0

但似乎不明白 key=1 或 0 是如何影响结果的。

【问题讨论】:

  • 使用键排序意味着使用键函数给出的值作为放置项目的指示进行排序。在这种情况下,01 之前,因此所有产生 key 0 的项目将被放置在所有产生 key 1 的项目之前。
  • key 视为原始数据与其他数据的“映射”(在本例中为1s 和0s)。这些1s 和0s 然后按照您的想象排序,然后映射反转以显示初始对象,但这次是排序的。
  • @khelwood 谢谢你们,我已经尝试在下面写下答案。
  • @Ev.Kounis 谢谢你,我已经尝试在下面写下答案。

标签: python lambda


【解决方案1】:

受@khelwood 和@Ev 的启发。 Kounis,我试着自己写答案。

lambda 函数可以重写如下:

def getKey(item):
    if item == 0:
        return 1
    else:
        return 0

当我使用地图功能时:

a = [1, 2, 0, 2, 0]
print map(getKey, a)

结果[0, 0, 1, 0, 1]

然后排序函数会根据上面的输出对原始列表进行排序。让我们回忆一下moveZeroes 函数:

class Solution(object):
    def moveZeroes(self, nums):
        nums.sort(key =lambda x : 1 if x == 0 else 0)
        return nums

print Solution().moveZeroes([1, 2, 0, 2, 0])
output: [1, 2, 2, 0, 0]

【讨论】:

【解决方案2】:

只是为了澄清一点。 key 在元素排序之前应用于您的数据。通常你会放像len 这样的东西,它提供了一个有用的措施来比较元素之间的相互关系。

但是在这种情况下,它正在利用该功能,基本上给0 提供1 的最高键值,其余的只是得到一个值0,它将所有0s 带到列表的末尾。 这就是为什么在该操作之后列表实际上没有排序,只是0s 粘在最后

nums.sort(key =lambda x : 1 if x == 0 else 0)

【讨论】:

    猜你喜欢
    • 2021-03-28
    • 2014-03-10
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多