python - 我正在尝试在 Python 中实现冒泡排序算法,但无法理解为什么它在一种情况下有效,而在另一种情况下无效

标签 python algorithm

my_list = [1,33,2,3,11,7,9,7,8]

def bubble(bad_list):
    sorted = False
    length = len(bad_list)-1

    while not sorted:
        sorted = True
        for i in range(length):
            if bad_list[i] > bad_list[i+1]:
                sorted = False
                bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

    return bad_list

bubble(my_list)
print my_list

好吧,我的代码运行良好,但是如果我将长度变量更改为

length = len(bad_list)

然后我收到一条错误消息,指出列表索引超出范围,为什么?

如果我真的很愚蠢,我深表歉意,但我感谢您的帮助。

谢谢

最佳答案

你得到这个错误是因为你有:

if bad_list[i] > bad_list[i+1]:
    ...

如果ilen(lst)(最后一次通过for循环),则i+1 超出了列表的范围。

关于python - 我正在尝试在 Python 中实现冒泡排序算法,但无法理解为什么它在一种情况下有效,而在另一种情况下无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28050911/

相关文章:

python - 不支持在 include() 中指定命名空间而不提供 app_name

python - 在 tensorflow 中初始化一个基本的一次性迭代器

python - if语句中 "in"的用法和含义?

使用C计算给定范围内的long int的素数数量

python - 如何使用 multipart/form POST 上传文件,只有需要上传的文件的 URL( block )

python - django admin 从操作注册动态模型

algorithm - 你会如何在 Haskell 中表达它?

algorithm - Pandas:求解时间序列数据集最高值的阈值

python - 硬币所有组合 - 两种算法之间的奇怪差异

algorithm - 对于整数 A>0、B>0、N>0,找到整数 x>0、y>0,使得 N-(Ax+By) 是最小的非负数