鱼C论坛

 找回密码
 立即注册
查看: 1740|回复: 4

[已解决]求助 关于sorted函数的key参数

[复制链接]
发表于 2020-8-2 23:21:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
sorted_id = sorted(range(len(nums)), key=lambda [b]k: nums[k])
nums是一个列表,key是比较的参数,lambda是匿名函数,但后面的nums【k】是什么意思?


class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        sorted_id = sorted(range(len(nums)), key=lambda k: nums[k])
        head = 0
        tail = len(nums) - 1
        sum_result = nums[sorted_id[head]] + nums[sorted_id[tail]]
        while sum_result != target:
            if sum_result > target:
                tail -= 1
            elif sum_result < target:
                head += 1
            sum_result = nums[sorted_id[head]] + nums[sorted_id[tail]]
        return [sorted_id[head], sorted_id[tail]]
最佳答案
2020-8-3 00:07:45
李万金 发表于 2020-8-2 23:45
谢谢你的回复,我上传了一张照片,我很困惑的是最后一次对num的排序。按照我的理解不应该是【0,2,3,1】吗 ...




num = [2,7,11,5] 对应位置参数是 [0,1,2,3] 也就是
0 对 2
1 对 7
2 对 11
3 对 5

排序后元素的大小顺序应该是 [2,5,7,11] 则对应原先的位置参数就为 [0,3,1,2] 这样看得懂吧

单独运行该段代码所得

单独运行该段代码所得
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-2 23:32:14 | 显示全部楼层


key是比较的参数,lambda是匿名函数,但后面的nums【k】是什么意思?


这里的 nums[k] 的 k 就是 nums 的下标索引,也就是通过 range(len(nums)) 产生一个和 nums 下标正好一致的整数序列

range(len(nums)) 将会一个个传入 key 参数的匿名函数中的 k 参数的值,而对应排序就是对应的列表中的元素

而将通过比较元素大小,来排序 range(len(nums)) 产生的序列顺序

简单来说 这里的 sorted(range(len(nums)), key=lambda k: nums[k]) 就是通过列表中对应索引值的元素的值,来对其索引值进行排序

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-2 23:45:21 | 显示全部楼层
Twilight6 发表于 2020-8-2 23:32
这里的 nums[k] 的 k 就是 nums 的下标索引,也就是通过 range(len(nums)) 产生一个和 nums 下标正 ...

谢谢你的回复,我上传了一张照片,我很困惑的是最后一次对num的排序。按照我的理解不应该是【0,2,3,1】吗?不是比较num的大小,然后在新建列表里显示num列表对应元素的排位吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 00:07:45 | 显示全部楼层    本楼为最佳答案   
李万金 发表于 2020-8-2 23:45
谢谢你的回复,我上传了一张照片,我很困惑的是最后一次对num的排序。按照我的理解不应该是【0,2,3,1】吗 ...




num = [2,7,11,5] 对应位置参数是 [0,1,2,3] 也就是
0 对 2
1 对 7
2 对 11
3 对 5

排序后元素的大小顺序应该是 [2,5,7,11] 则对应原先的位置参数就为 [0,3,1,2] 这样看得懂吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-3 15:36:01 | 显示全部楼层
Twilight6 发表于 2020-8-3 00:07
num = [2,7,11,5] 对应位置参数是 [0,1,2,3] 也就是
0 对 2
1 对 7

恍然大悟,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表