我想寫一個合併排序函數,它接受一個列表和比較功能,在Python:比較兩個元組的第二個元素與「<」未能在Python
def sort(unsorted, comp_func=lambda x, y: x < y):
length = len(unsorted)
if length <= 1: return unsorted
halflen = length/2
lsorted= sort(unsorted[:halflen])
rsorted = sort(unsorted[halflen:])
combined = []
while True:
if len(lsorted) > 0:
if len(rsorted) > 0 and comp_func(rsorted[0], lsorted[0]):
combined.append(rsorted[0])
rsorted = rsorted[1:]
else:
combined.append(lsorted[0])
lsorted = lsorted[1:]
elif len(rsorted) > 0:
combined.append(rsorted[0])
rsorted = rsorted[1:]
else:
break
return combined
它工作正常列表爲int(使用默認的comp_func),以及當比較函數比較這樣一個元組的第一個元素時具有2個元組的列表int。
comp_func = lambda x, y: x[0] < y[0]
但是,當我編寫比較函數以通過元組的第二個元素進行比較時,返回的列表仍然是未排序的版本。
comp_func = lambda x, y: x[1] < y[1]
但是,如果我改變「<」操作員「>」,這樣的列表將被遞減排序,它的工作原理:
comp_func = lambda x, y: x[1] > y[1]
不知道爲什麼「<」失敗在元組的第二個元素上...
已經搜索了可能的解釋,我發現這個:Does python think 10 is less than 9。但是,情況並非如此;正在排序的列表包含元組int,而不是字符串。
你忘了測試向量(S)。 – 2012-03-26 03:23:53