Python中使用lambda作为key调用sort方法排序为何返回None
问题原因
Python列表对象的sort()方法是原地操作:它会直接修改当前列表内部的元素排列顺序,不会生成新列表,方法本身的返回值固定为None。
你写的lambda排序规则本身没有问题,出现None输出的核心原因是你直接把sort()的返回值传给了print()函数,打印的是方法的返回值,而非排序后的列表内容。
修正方案
根据你是否需要保留原列表的原始顺序,选任意一种写法即可:
- 方案1:接受原地修改逻辑,先执行排序操作,再打印原列表
some_authors = ["Isaac Asimov", "Ray Bradbury", "Sin Johny", "Big Dinggus", "Big Chunggos","H.G Wels", "H.P Lovecraft"] some_authors.sort(key=lambda name: name.split(" ")[-1].lower()) print(some_authors)
执行后输出正确排序结果:
['Isaac Asimov', 'Ray Bradbury', 'Big Chunggos', 'Big Dinggus', 'Sin Johny', 'H.P Lovecraft', 'H.G Wels']
- 方案2:如果不想改动原列表的原始顺序,使用内置
sorted()函数,该函数会返回排序完成的新列表,可以直接传入print输出
some_authors = ["Isaac Asimov", "Ray Bradbury", "Sin Johny", "Big Dinggus", "Big Chunggos","H.G Wels", "H.P Lovecraft"] print(sorted(some_authors, key=lambda name: name.split(" ")[-1].lower()))
内容的提问来源于stack exchange,提问作者user14024087
相关产品推荐
相关产品推荐

