首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: Heap排序

Python: Heap排序
EN

Code Review用户
提问于 2019-07-06 10:36:32
回答 1查看 185关注 0票数 1

我是python的初学者,我通过编写算法和数据结构程序来学习python中的语法和其他函数。

如何改进这些代码?

代码语言:javascript
复制
def get_input(): #to get input from user
    input_str = input("Enter elements to be sorted: ")
    try:
        lst = list(map(int, input_str.split())) #make a list of integers from input string
    except:
        raise TypeError("Please enter a list of integers only, seperated by a space!!")
    return lst

def max_heapify(thelist, lst_size, idx):
    largest = idx
    left_child = (2 * idx) + 1
    right_child = (2 * idx) + 2

    if left_child < lst_size and thelist[left_child] > thelist[largest]:
        largest = left_child

    if right_child < lst_size and thelist[right_child] > thelist[largest]:
        largest = right_child

    if largest != idx:
        thelist[idx], thelist[largest] = thelist[largest], thelist[idx]
        max_heapify(thelist, lst_size, largest)

def build_max_heap(thelist, lst_size):
    for curr_idx in range(lst_size // 2 - 1, -1, -1):
        max_heapify(thelist, lst_size, curr_idx)

def heap_sort(thelist):
    if len(thelist) == 0:
        print("Empty list!!")

    elif len(thelist) == 1:
        print("Only one element!!")

    else:
        build_max_heap(thelist, len(thelist))

        for curr_idx in range(len(thelist) -1, 0, -1):
            thelist[curr_idx], thelist[0] = thelist[0], thelist[curr_idx] #swapping
            max_heapify(thelist, curr_idx, 0)

if __name__ == '__main__':
    input_list = get_input()
    heap_sort(input_list)
    print(*input_list, sep = ", ")
EN

回答 1

Code Review用户

发布于 2019-07-06 13:16:38

使用标准文档字符串

本评论如下:

代码语言:javascript
复制
to get input from user

最好放在docstring中:

代码语言:javascript
复制
def get_input():
    """
    get input from user
    """

考虑使用类型提示

最好用谷歌搜索,因为它有大量的信息,但举个例子:idx参数将是idx: int

算子优先

代码语言:javascript
复制
(2 * idx) + 1

不需要父母,因为乘法比加法有更强的关联。

从不except:

至少,您应该编写except Exception而不是except。后者可以防止用户中断(Ctrl+C)工作。如果可能,将异常替换为更具体的内容。

使用理解

map有点难读。相反,不如

代码语言:javascript
复制
lst = [int(e) for e in input_str.split()]

变量命名

lst是没有帮助的--而不是根据它们的类型命名,您应该根据它们对程序的实际意义来命名它们--在这种情况下,可能是“元素”。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/223609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档