You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何sorted函数的key参数使用lambda获取索引1时触发IndexError?

为何sorted函数的key参数使用lambda获取索引1时触发IndexError?

嘿,我来帮你把这个问题掰扯清楚~

你遇到的问题核心其实是你传给sorted的列表根本不是元组列表,而是一个只包含单个字符串的列表!

先看你写的列表推导式:[val[0] for val in [('C', 'C')]],它会遍历每个元组,只把元组的第一个元素(也就是字符串'C')取出来,最终生成的列表是['C']。

而sorted的key函数是作用在列表里的每一个元素上的,这里每个元素都是字符串'C'——字符串的长度只有1,只有索引0有效,你用lambda tpl: tpl[1]去取索引1,自然就触发IndexError了。

如果你想实现“按元组的第二个元素排序,最终得到元组第一个元素的排序结果”,正确的做法应该是先对元组列表排序,再提取第一个元素,比如:

# 先按元组第二个元素排序元组列表,再提取每个元组的第一个元素
result = [val[0] for val in sorted([('C', 'C')], key=lambda tpl: tpl[1])]

或者如果你需要先做一些预处理,也要保留排序所需的第二个元素信息,比如:

# 保留元组的两个元素,排序后再提取第一个
processed = [(val[0], val[1]) for val in [('C', 'C')]]
sorted_processed = sorted(processed, key=lambda tpl: tpl[1])
result = [item[0] for item in sorted_processed]

这样就能避免错误啦,本质就是别提前丢掉排序需要用到的元组信息~

备注:内容来源于stack exchange,提问作者hepcat72

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 11:04:51