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

如何修复鸡尾酒排序(Cocktail Sort)代码中的TypeError错误

修复鸡尾酒排序代码的TypeError问题

错误原因

你代码里的核心问题是把内置类型list当成了传入的列表变量来使用。函数参数定义的是seq: list,但你在循环里写了len(list)、list[j],这里的list是Python的列表类型本身,不是你传入的具体列表实例,所以调用len(list)会抛出TypeError——类型对象没有len()方法。

另外还有一个逻辑错误:第二个for循环里的if not swapped: return list位置不对,应该放在两轮遍历(从右到左、从左到右)都完成之后,否则第一次内层循环没交换就提前返回,会导致排序不完整。

修复后的代码

def cocktail_sort(seq: list):
    # 用参数seq代替内置类型list,获取传入列表的长度
    for i in range(len(seq) - 1, 0, -1):
        swapped = False
        # 从右往左遍历,把最小元素移到左侧
        for j in range(i, 0, -1):
            if seq[j] < seq[j-1]:
                # 用Python的交换语法简化代码,不需要临时变量
                seq[j], seq[j-1] = seq[j-1], seq[j]
                swapped = True
        # 从左往右遍历,把最大元素移到右侧
        for j in range(i):
            if seq[j] > seq[j+1]:
                seq[j], seq[j+1] = seq[j+1], seq[j]
                swapped = True
        # 两轮遍历后如果没有交换,说明列表已经有序,提前退出
        if not swapped:
            return seq
lst = [15, 4, 7, 2, 1, 20]               
print(cocktail_sort(lst))

关键修复点说明

  • 所有list的引用都替换成了函数参数seq,确保操作的是传入的具体列表
  • 把if not swapped的判断移到了两轮遍历的外面,保证每一轮完整的左右遍历后再检查是否有序
  • 用Python的元组交换语法a, b = b, a替代了临时变量,让代码更简洁易读
  • 增加了注释说明每一步的作用,方便理解鸡尾酒排序的双向遍历逻辑

运行修复后的代码,会输出正确的排序结果:[1, 2, 4, 7, 15, 20]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:31