python merge sort实现导致嵌套列表

时间:2013-05-21 07:48:28

标签: python list

我正在尝试在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']

我的语法错误是什么?

1 个答案:

答案 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