2016-01-17 6 views
0

Я пытаюсь создать вставку Sort, которая берет наименьшее число из списка и добавляет его в другой список.Вставить индекс сортировки индекса?

Проблема в том, что все, что я пытаюсь вывести() номер из списка, я получаю индексную ошибку.

Вот мой код:

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 (список) 'с последующими повторными вызовами' heapq.heappop (список) ', вместо зацикливания через' list' найти минимум вручную и используя 'list.pop()'. Модуль 'heapq' является частью стандартной библиотеки Python и построен именно для того, чтобы эффективно отслеживать наименьшее значение в последовательности. – jez

ответ

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) 
Смежные вопросы