You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表比较时出现'NoneType' object has no attribute 'sort'错误求助

解决你的Codewars平方列表比较问题

嘿,我来帮你搞定这个问题!你遇到的AttributeError: 'NoneType' object has no attribute 'sort'其实是个很常见的Python列表操作小坑,咱们一步步拆解修复:

错误根源

list.sort()是原地排序方法,它的返回值是None。你写的a2_sorted = a2.sort()会把a2_sorted赋值成None,后续拿它和排序后的new_list比较本质是拿列表和None对比,完全不符合逻辑;如果a2本身是None的话,调用a2.sort()还会直接触发报错。

另外,原代码没考虑两个列表长度不一致的情况——如果长度不一样,那肯定不可能满足“b是a元素的平方”这个条件,应该提前返回False。

修复后的代码

def comp(a1, a2):
    # 先处理边界情况:任一列表为None,或者长度不等,直接返回False
    if a1 is None or a2 is None or len(a1) != len(a2):
        return False
    
    # 生成a1所有元素的平方列表,用列表推导式更简洁
    squared_a1 = [num ** 2 for num in a1]
    
    # 用sorted()生成排序后的新列表,直接比较即可
    return sorted(squared_a1) == sorted(a2)

# 测试你的示例用例
print(comp(a1=[121, 144, 19, 161, 19, 144, 19, 11], 
           a2=[11 * 11, 121 * 121, 144 * 144, 19 * 19, 161 * 161, 19 * 19, 144 * 144, 19 * 19]))

关键修复细节

  • 替换sort()为sorted():sorted()函数会返回一个全新的排序后的列表,不会修改原列表,这样我们可以直接拿两个排序后的列表做相等比较,彻底避免了None的问题。
  • 增加边界检查:提前过滤掉None输入和长度不一致的情况,既符合题目逻辑,也能避免很多运行时错误。
  • 简化平方列表生成:用列表推导式[num**2 for num in a1]代替循环+append,这是Python中更简洁高效的写法。

这样修改后,你的代码就能正确处理所有测试用例啦,包括之前出错的情况~

内容的提问来源于stack exchange,提问作者Inan Inqn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 06:32:42