我正在尝试在python中实现合并排序
#!/usr/bin/python
import math
def merge_sort(unsorted):
if(len(unsorted)<2):
return unsorted
middle = int(math.floor(len(unsorted)/2))
left = merge_sort(unsorted[0:middle])
right = merge_sort(unsorted[middle:])
return merge(left, right)
def merge(left, right):
results = []
while (len(left) > 0 and len(right) > 0 ):
if(left[0] < right[0]):
results.append(left.pop(0) )
else:
results.append( right.pop(0))
if (len(left) > 0):
results.append(left)
if (len(right) > 0):
results.append(right)
return results
print merge_sort(list('7123'))
但是,我的结果看起来像[['1'], ['2'], ['3'], [['7']]]
而不是['7', '1', '2', '3']
。
我的语法错误是什么?
答案 0 :(得分:5)
在此处使用list.extend
:
if (len(left) > 0):
results.extend(left)
if (len(right) > 0):
results.extend(right)
list.append
vs list.extend
:
>>> lis = [1, 2 , 3]
>>> lis.append( [4, 5] ) #appends the whole object at the end of the list
>>> lis
[1, 2, 3, [4, 5]]
>>> lis.extend( [6, 7] ) #appends individual items from the iterable
>>> lis
[1, 2, 3, [4, 5], 6, 7]
list.extend
上的帮助:
>>> print list.extend.__doc__
L.extend(iterable) -- extend list by appending elements from the iterable