Python列表sort方法返回值问题及元组排序正确写法咨询
问题:列表sort方法配合lambda排序后print输出None的原因及其他实现方式
为什么你的代码输出None
list.sort()是原地排序方法——它会直接修改原列表的顺序,但方法本身的返回值是None。你直接执行print(a.sort(key=lambda num: num[1])),本质是打印这个方法的返回值,所以结果是None。
正确的逻辑是先调用sort()完成原列表的排序修改,再打印修改后的列表:
a = [(0, 2), (4, 3), (9, 9), (10, -1)] a.sort(key=lambda x: x[1]) print(a) # 输出: [(10, -1), (0, 2), (4, 3), (9, 9)]
其他正确的实现方式
1. 使用sorted()函数(不修改原列表)
sorted()函数不会改变原列表,而是返回一个新的排序后的列表,适合需要保留原列表的场景:
a = [(0, 2), (4, 3), (9, 9), (10, -1)] print(sorted(a, key=lambda x: x[1])) # 直接输出排序后的新列表
2. 使用operator.itemgetter(更高效)
对于按元素下标排序的场景,使用operator模块的itemgetter比lambda表达式更高效,代码也更简洁:
from operator import itemgetter a = [(0, 2), (4, 3), (9, 9), (10, -1)] a.sort(key=itemgetter(1)) print(a) # 或者结合sorted使用 print(sorted(a, key=itemgetter(1)))
内容的提问来源于stack exchange,提问作者parrtakenn
相关产品推荐
相关产品推荐

