2016-01-17 82 views
0

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

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

这里是我的代码:

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

听起来像是你应该'进口heapq'和使用'名单= heapq.heapify(名单)'遵循而不是通过'list'循环,从而找到通过为'heapq.heappop重复调用(名单)',最小手工使用'list.pop()'。 'heapq'模块是标准Python库的一部分,专门用于有效跟踪序列中最小的值。 – jez

回答

1

当函数调用失败时,读取文档或在此例中使用>>> help(list.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]

函数的以下版本使用内置的min函数并给出了相同的输出。

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