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

Python中如何正确打印冒泡排序过程?现有代码为何循环输出异常?

冒泡排序代码无法按预期执行的原因分析

问题背景

编写了如下Python冒泡排序代码:

lst = [6, 3, 0]

keepGoing = True

while keepGoing == True:
    for element in lst:
        thiselem = element
        if lst[lst.index(thiselem)] != lst[-1]:
            nextelem = lst[lst.index(thiselem) + 1]
            if int(thiselem) > int(nextelem):
                lst[lst.index(thiselem) + 1] = thiselem
                lst[lst.index(thiselem)] = nextelem
            print(lst)

实际输出是反复打印:

[0,6,3] 

期望输出是打印排序的每一步,完成后停止:

[3,6,0]
[3,0,6]
[0,3,6]

问题原因

  • lst.index(thiselem) 导致索引混乱
    index() 方法只会返回第一个匹配元素的位置,当列表在交换过程中出现重复值时,它会指向错误的索引。比如列表变成 [0,6,3] 后,循环到元素6时,lst.index(6) 确实是索引1,但交换操作会让列表回到之前的状态,直接陷入死循环,反复打印同一个结果。

  • keepGoing 状态从未更新
    冒泡排序的终止条件是“某一轮循环中没有发生任何交换”,你的代码里 keepGoing 始终被设为 True,没有在循环中根据是否发生交换修改它的状态,所以即使列表已经有序,循环还会持续执行。

  • 遍历方式错误
    直接遍历列表元素再用 index() 找位置的方式不可靠,冒泡排序应该通过索引遍历相邻元素对,这样能精准控制每一对需要比较的元素,避免索引混乱的问题。

修正后的代码示例

lst = [6, 3, 0]

keep_going = True
while keep_going:
    keep_going = False  # 默认本轮无交换,若有序则退出循环
    for i in range(len(lst) - 1):
        if lst[i] > lst[i+1]:
            # 交换相邻元素
            lst[i], lst[i+1] = lst[i+1], lst[i]
            keep_going = True  # 标记本轮有交换,需继续循环
            print(lst)

这段代码的输出与期望一致:

[3, 6, 0]
[3, 0, 6]
[0, 3, 6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:08