列表切片是编写合并排序代码的有效方法

时间:2019-06-08 19:37:31

标签: python

我不是python专家,所以想知道在每个递归步骤中使用列表切片是否是编写代码的有效方法。

def mergesort(items):

    if len(items) <= 1:
        return items

    mid = len(items) // 2
    left = items[:mid]
    right = items[mid:]

    left = mergesort(left)
    right = mergesort(right)

    return merge(left, right)

def merge(left, right):

    merged = []
    left_index = 0
    right_index = 0

    while left_index < len(left) and right_index < len(right):
        if left[left_index] > right[right_index]:
            merged.append(right[right_index])
            right_index += 1
        else:
            merged.append(left[left_index])
            left_index += 1

    merged += left[left_index:]
    merged += right[right_index:]

    return merged

1 个答案:

答案 0 :(得分:0)

是的,列表切片在python中被认为是不错的选择。

是否有效是另一个故事-如果您首先使用python,则速度可能不是您的目标(这就是编译语言的目的)。 Python在编码中通常会在 speed 上重视 clarity elegance (尝试通过在命令行上执行python打开python控制台,然后然后输入import this并阅读出现的内容),其中将显示切片列表。

但是列表切片仍然会生成一个新列表,并且就地进行合并排序(交换列表倾斜,而不是合并列表)会更有效地利用内存(作为副产品,速度也可能会稍微提高一点)。 The wikipedia entry on MergeSort谈论了一些。