sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表——找bug

Posted mingzhuqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表——找bug相关的知识,希望对你有一定的参考价值。

找bug

看例子:

test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]
new_scores = test_scores.sort()
new_scores = new_scores.reverse()
print(new_scores)
# 报错:AttributeError: ‘NoneType‘ object has no attribute ‘reverse‘ in line 3.
#(属性错误:第三行中,NoneType 对象没有 reverse 属性。)

原来是第二行代码中, new_scores = test_scores.sort(),而不是 test_scores.sort()

第三行写的是 new_scores = new_scores.reverse(),也不是我们要求写的 test_scores.reverse().

这样写是不可以的,因为 sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表,所以它们是没有返回值的,或者说,返回的是 None。因此,第二行中,new_scores 赋到的值是 None,再对 None 调用 reverse() 方法当然会出错。

 

下面我们来用代码验证一下:

test_scores = [100, 97, 76, 84, 93, 98, 86, 92, 76, 88, 95, 90, 95, 93]
new_scores = test_scores.sort()
print(new_scores)
# 输出:None

调用 test_scores.sort() 方法,Python 会立刻对 scores 列表本身进行排序。不要以为调用 test_scores.sort() 方法会返回一个排序后的列表,其实返回的是 None,这时下一行调用方法 new_score.reverse() 就相当于调用了 None.reverse(),又把电脑整懵了。

在实际运用中,我们直接调用 sort() 方法来给列表中的元素排序,用 reverse() 直接倒转原列表,不必重新赋值。

 

以上是关于sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表——找bug的主要内容,如果未能解决你的问题,请参考以下文章

sort() 和 reverse() 方法只是对原来的列表进行操作,不会生成新的列表——找bug

sort() 函数以及lambda匿名函数

数组排序方法——reverse() 和 sort() !! sort( ) 参数浅析

列表排序

JavaScript学习笔记:数组的sort()和reverse()方法

python3-排序