python list IndexError: pop index out of range

问题遇到的现象和发生背景 
alist = [2,1]
alist.insert(0,alist.pop(alist[1]))
print(alist)
#结果 [1,2]
def bubbleSort(alist):
    for _ in range(len(alist)):
        i = 0 
        while i < len(alist)-1:
            if alist[i] > alist[i+1]:
                print(i)
                alist.insert(i,alist.pop(alist[i+1]))
            #IndexError: pop index out of range  为什么会error呢
                i += 1 
    return alist 

mylist = [5,4]
print(bubbleSort(mylist))


为什么说pop index out of range?

报错的原因是pop(alist[i+1])里alist[i+1]为4,但是pop(4)没有这个索引。
抛开这个错误不谈,逻辑好像也有点问题,即使能交换位置,也会陷入死循环,你再检查一下?

你的alist.pop(alist[i+1])
这个肯定有问题啊,i为0的时候,你的alist[i+1]就是alist[1]就是4,那么alist.pop(4)肯定越界了

第一次循环的时候i=0,alist[i+1]返回的值是mylist中的第二个元素4,pop函数的入参是索引值,alist.pop(alist[i+1])实际上是alist.pop(4),肯定会报角标越界异常

代码应该不全吧,你把i+=1写进if里,不会死循环?
第一次循环,0和1交换了
你外层还有个for循环,所以会再次进入while,此时if不成立,那么i永远不变,标准死循环啊

def bubbleSort(arr):
    n = len(arr)
 
    # 遍历所有数组元素
    for i in range(n):
 
        # Last i elements are already in place
        for j in range(0, n-i-1):
 
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
 
arr = [64, 34, 25, 12, 22, 11, 90]
 
bubbleSort(arr)
 
print ("排序后的数组:")
for i in range(len(arr)):
    print ("%d" %arr[i]),

第7行: alist.pop(alist[i+1]) alist.pop(list的下标,而不是list的值)

可以改成 alist.insert(i, alist.pop(i+1))

感谢各位,忘了pop()应该是index了。