Python列表排序判断错误及NameError: sorted_list未定义问题求助
问题解答
问题1:哪行代码正确?
两行代码都不正确,核心原因是:
Python中列表的sort()方法是原地排序——它会直接修改调用它的列表本身,并且返回值固定为None。所以无论你写mylist[:].sort()还是list(mylist[:]).sort(),最终sorted_list都会被赋值为None,自然无法和原列表正确比较,导致返回结果错误。
正确的写法有两种:
- 使用内置函数
sorted(),它会返回一个全新的排序后的列表,不会修改原列表:
sorted_list = sorted(mylist)
- 先复制列表,再单独调用
sort()方法(必须分两步,不能连写赋值):
sorted_list = mylist[:] sorted_list.sort()
问题2:NameError错误原因
这是变量作用域规则导致的:
- 在函数
is_sorted内部定义的sorted_list是局部变量,它的作用范围仅限于函数内部。 - 函数外部的代码(比如你写的
print(sorted_list))无法访问函数内部的局部变量,因此会抛出NameError,提示该变量未定义。
如果需要在函数外部使用这个变量,更合理的方式是让函数返回该变量,示例如下:
def is_sorted(mylist): sorted_list = sorted(mylist) return sorted_list == mylist, sorted_list # 接收返回的结果和排序后的列表 is_ordered, sorted_list = is_sorted(['Aajid', 'Bafiee', 'Hello']) print(is_ordered) print(sorted_list)
内容的提问来源于stack exchange,提问作者Majid
相关产品推荐
相关产品推荐

