为何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
相关产品推荐
相关产品推荐

