我试图创建一个插入排序,它从列表中取出最小的数字并将其附加到另一个列表中。
问题是,我试图弹出()列表中的数字,我得到一个索引错误。
这是我的代码:
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
提前感谢您的帮助。
答案 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)