2016-09-06 3 views
-1

Я новичок в python. Я пытаюсь написать код python для mergesort, и я не могу найти ошибку.Получение ошибок неупорядоченных типов: int()> = list()

import math 
t = int(input()) 

def merge(lf,rf): 
    p=0 
    q= 0  
    b=[] 
    for i in range(len(rf)+len(lf)):  
     if (p>=len(lf)): 
      b.append(rf[q:]) 
      break 
     elif (q>=len(rf)): 
      b.append(lf[p:]) 
      break 
     elif (lf[p]>=rf[q]): 
      b.append(rf[q]) 
      q=q+1 
     else: 
      b.append(lf[p]) 
      p=p+1 
    return b 


def sort(a): 
    if (len(a)>1): 
     mid = int(len(a)/2) 
     lf=a[:mid] 
     rf=a[mid:] 
     lf=sort(lf) 
     rf=sort(rf) 
     a=merge(lf,rf) 
     print (a) 
    return a 

for i in range(t): 
    n = int(input()) 
    a = [0]*n 
    for j in range(n): 
     a[j]=int(input()) 
    sort(a) 
    print(a) 
+0

В какой строке возникает ошибка неупорядоченных типов? Короче говоря, вы сравниваете целое число со списком целых чисел, и это не допускается в Python 3. Возможно, вы задумали забыть индексировать ссылку на список (например, 'x> l [i]' вместо 'x> = l [i] 'Пожалуйста, прочитайте http://stackoverflow.com/help/mcve – chepner

+1

Последний оператор' print' в вашем цикле for печатает исходный список, и я не уверен, что это предназначено. Если вы хотите распечатать отсортированный список вместо этого вам придется переназначить 'a' для возврата' sort'. – Leon

+0

Когда ваш код на Python выдает сообщение об ошибке, очень полезно, если вы можете вставить сообщение об ошибке трассировки _entire_ в ваш вопрос, чтобы мы могли точно увидеть, что вызывает Ошибка. (Поместите его в блок-блок, чтобы сохранить форматирование). –

ответ

2

Эта линия

b.append(rf[q:]) 

добавляет список rf[q:] к b как один элемент. Но это не то, что вы действительно хотите, потому что b заканчивается содержаниями подписок чисел, а также номерами, которые должны содержать. Так что вам нужно добавить содержимом из rf[q:] в b, и вы можете сделать это с

b.extend(rf[q:]) 

Аналогичные замечания относятся к

b.append(lf[p:]) 

возникает сообщение об ошибке, потому что ваш код пытается сравнивать числа в списки lf и rf с этими подсписками, которые вы случайно добавили.

Кроме того, как Леон упоминает в комментариях, что вам нужно сделать

a = sort(a) 

в второй-последней строке сценария, потому что ваша sort функция не изменяет a вы передаете его.


Кстати, нет необходимости импортировать математический модуль в этом сценарии: вы не вызывая какой-либо из его функций или с помощью любого из констант определяет.

1

Когда вы либо b.append(rf[q:]) или b.append(lf[p:]), вы добавление списка как элемент списка b, который выглядит, как он должен быть списком целых чисел.