热线电话:13121318867

登录
2019-01-26 阅读量: 857
使用排序技术时出现TypeError

当我尝试在合并排序函数中使用递归时,我得到一个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)

0.0000
0
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子