插入排序索引错误?

时间:2016-01-17 16:10:11

标签: python-3.x

我试图创建一个插入排序,它从列表中取出最小的数字并将其附加到另一个列表中。

问题是,我试图弹出()列表中的数字,我得到一个索引错误。

这是我的代码:

alist = [2,9,8,6,1]
blist =[] 

def insertsort(list, slist) :
    for item in list:
       smallest = list[0] 
       if item < smallest:
           smallest = list[item] 
       list.pop(smallest) 
       slist.append(smallest) 

insertsort(alist, blist) 

print(blist) 

错误是:

IndexError: pop index out of range

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

当函数调用失败时,读取文档,或者在这种情况下使用>>> help(list.pop)。等待几个小时让某人回答一个微不足道的问题的速度要快得多。

pop的参数是列表中值的索引,而不是值本身。修复后,您的代码还有其他一些问题。

alist = [2,9,8,6,1]
blist =[] 

def insertsort(inlist, outlist):
    while inlist:
        it = iter(inlist)
        sdex = 0
        small = next(it)
        for dex, item in enumerate(it, 1):
           if item < small:
               sdex = dex
               small = item
        inlist.pop(sdex)
        outlist.append(small) 

insertsort(alist, blist) 

print(blist)

打印[1, 2, 6, 8, 9]

以下版本的函数使用内置最小函数并提供相同的输出。

def insertsort(inlist, outlist):
    while inlist:
        small = min(inlist)
        inlist.pop(inlist.index(small))
        outlist.append(small)