Python初学者疑问:list.sort()与sorted()为何导致两段代码输出不同?
问题:两段Python代码为何输出不同?
我是一名Python初学者,疑惑为何以下两段代码会产生不同输出:
Program-1
l1 = [235, 300, 666, 788, 1092] l2=sorted(l1) if l1 == l2: print("List is in ascending order") else: print("Not in ascending")
Program-2
if l1 == l1.sort(): print("List is in ascending order") else: print("Not in ascending")
我原本预期两段代码都会输出“List is in ascending order”,但Program-2进入了Else分支,这是为什么?
原因解析
核心是list.sort()和sorted()的返回逻辑不一样:
sorted(l1)是独立函数,它会生成一个新的排序后列表,原列表l1完全不变。所以Program-1里l2是排序后的新列表,和本身就有序的l1比较,结果相等,触发if分支的输出。l1.sort()是列表的内置方法,它会直接修改原列表让它变成有序,但这个方法的返回值是None。Program-2里实际是在比较l1(已经被排序后的列表)和None,这两个显然不相等,所以进入else分支。
你可以把Program-2的执行过程拆成两步,就看得更清楚了:
l1.sort() # 这行代码把l1改成有序,但返回值是None if l1 == None: # 这个判断肯定不成立 print("List is in ascending order") else: print("Not in ascending")
如果想用sort()实现和Program-1一样的效果,可以先复制原列表再排序比较:
l1 = [235, 300, 666, 788, 1092] l2 = l1.copy() l2.sort() if l1 == l2: print("List is in ascending order") else: print("Not in ascending")
内容的提问来源于stack exchange,提问作者Nivi
相关产品推荐
相关产品推荐

