因为merge_sort函数没有返回值,所以l1=merge_sort(left)和r1=merge_sort(right)中出l1和r1没有类型的错误,加一个返回值return li就没问题了.
完整的Python程序如下(改动的地方见注释)
def merge_sort(li):if len(li)==1:
return li #这里return改成return li
mid=len(li)//2
left=li[:mid]
right=li[mid:]
l1=merge_sort(left)
r1=merge_sort(right)
return merge(l1,r1)
def merge(left,right):
result=[]
while len(left)>0 and len(right)>0:
if left[0]<=right[0]:
result.append(left.pop(0))
else:
result.append(right.pop(0))
result+=left
result+=right
return result
a=[2,39,92,19,28,32,85,53]
print(merge_sort(a))
源代码(注意源代码的缩进)
tag_sorted = sorted(tag_count.iteritems(),key = operator.itemgetter(1),reverse = True)# tag_sorted是个列表
eg.
>>>adict = dict([(x, 10+x) for x in xrange(10)])
>>>adict
{0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}
>>>sorted(adict.iteritems())
[(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]
>>>
对于列表是没有.iteritems()方法的;后续代码可以调整为:
for i,(k,v) in enumerate(tag_sorted):
print("%d %d %d"%(k,v,i))
numbers.sort这种用法是错误的,如果你想要排序,则用如下语句:num_sort=sorted(numbers,key=None,reverse=False)
新的list num_sort才是一个排序后的列表。然后,你自定义的cmp过程只能对比两个数字,而能对比列表中的各个元素,python3解释器不知道你要做什么,所以才会出错。