当我尝试在合并排序函数中使用递归时,我得到一个TypeError。我试图返回一个包含列表和数字的元组。如果仅返回列表,则我的函数能够正确排序并返回排序列表。
我想要的输出:
([1,2,3,4,5,6,7,8,9,10,...],100)
我的合并函数采用一个列表和简单的lambda表达式来比较两个数字。
def merge_s(list_s, ordering):
if len(list_s) < 2:
return list_s, 100
result = []
mid = int(len(list_s) / 2)
y = merge_s(list_s[:mid], ordering)
z = merge_s(list_s[mid:], ordering)
i = 0
j = 0
first_item = ''
second_item = ''
while i < len(y) and j < len(z):
first_item = y[i]
second_item = z[j]
if ordering(second_item, first_item):
result.append(z[j])
j += 1
else:
result.append(y[i])
i += 1
result += y[i:]
result += z[j:]
return result, 100
我的主要功能:
from random import shuffle
def main():
for i in range(10):
data = list(range(100))
shuffle(data)
comp = lambda a, b: a < b #my compare function
(sorted_data, _) = merge_s(data, comp)
test = (sorted_data,_)
print(test)
但是,我收到错误:
TypeError: '<' not supported between instances of 'int' and 'list'
解决办法:
merge_s 收益: result, 100
但是,当您获得递归调用的结果时:
y = merge_s(list_s[:mid], ordering)
z = merge_s(list_s[mid:], ordering)
你把它看作是merge_s刚刚返回result而不是一个元组(result, 100)
while i < len(y) and j < len(z):
first_item = y[i]
second_item = z[j]
if ordering(second_item, first_item):
这有一个非常简单的修复,你只需提取结果y和z:
y, _ = merge_s(list_s[:mid], ordering)
z, _ = merge_s(list_s[mid:], ordering)








暂无数据