Python自定义排序函数按指定字段排序出现IndexError异常问题
报错原因
- sorted的
key参数对应的函数,接收的是待排序列表的单个元素作为入参,而非整个待排序列表。你写的order函数错误地将入参的单个字符串(列表A的元素本质是逗号分隔的字符串)做了遍历,相当于遍历字符串的每一个字符,将单个字符执行split(',')后得到的列表长度恒为1,访问m[1]自然会触发索引越界。 - 之前使用
m[0]未报错是因为单个字符split后取第一个元素逻辑合法,但此时排序依据是每个字符串的首字符字典序,所以才会得到[5,3,10,12,15]这种不符合数字顺序的结果,本质排序逻辑也是错误的。
正确实现方案
你的需求是按每个元素中第三个字段(对应A/B/C/D/E的字段,split后索引为2)的顺序排序,直接在key函数中取出该字段作为排序依据即可:
A =['12,Boring Stuff with Python Programming,D,692617,4.6,70508', '10,Complete C# 2D,A,364934,4.6,78989', '5,Java Developers,B,502572,4.6,123798', '15,Learn Python Programming Masterclass,C,240790,4.5,58677', '3,Machine Learning A-Z,E,692812,4.5,132228',] # key函数直接处理单个元素,取对应A/B/C/D/E的字段即可 sorted_A = sorted(A, key=lambda x: x.split(',')[2]) print(sorted_A)
运行后输出结果就是按A→B→C→D→E顺序排列的列表:
['10,Complete C# 2D,A,364934,4.6,78989', '5,Java Developers,B,502572,4.6,123798', '15,Learn Python Programming Masterclass,C,240790,4.5,58677', '12,Boring Stuff with Python Programming,D,692617,4.6,70508', '3,Machine Learning A-Z,E,692812,4.5,132228']
内容的提问来源于stack exchange,提问作者Ranjan
相关产品推荐
相关产品推荐

