如何使用lambda函数对元组列表排序?代码输出None该如何解决?
问题原因
- 你代码输出
None是因为Python的list.sort()是原地排序方法,仅修改调用它的列表本身,没有返回值,默认返回None,你把这个返回值赋值给a打印自然得到None。 - 你定义的lambda逻辑有误:传入的参数
x完全没有被使用,内部硬编码了全局变量listoftuples,也没有用到lambda来定义排序规则。
正确用法
对元组列表排序时,lambda通常用作sort()或者sorted()的key参数,用来指定排序的参照字段。
1. 原地排序(修改原列表)
如果你不需要保留原列表,直接对原列表排序,写法如下:
listoftuples = [('English', 88), ('Science', 90), ('Maths', 97), ('Social sciences', 82)] # 按元组的第二个元素(分数)升序排序 listoftuples.sort(key=lambda x: x[1]) print(listoftuples)
输出结果:
[('Social sciences', 82), ('English', 88), ('Science', 90), ('Maths', 97)]
2. 生成新的排序后列表(不修改原列表)
如果你需要保留原列表,使用内置函数sorted(),它会返回新的排序完成的列表:
listoftuples = [('English', 88), ('Science', 90), ('Maths', 97), ('Social sciences', 82)] # 按元组的第二个元素(分数)升序排序,得到新列表 sorted_list = sorted(listoftuples, key=lambda x: x[1]) print(sorted_list)
如果需要按降序排序,加上reverse=True参数即可,示例:
# 按分数从高到低排序 listoftuples.sort(key=lambda x: x[1], reverse=True)
内容的提问来源于stack exchange,提问作者Shreyash Kashyap
相关产品推荐
相关产品推荐

