【问题标题】:How write a function that sorts and appends to new list?如何编写一个对新列表进行排序和追加的函数?
【发布时间】:2014-10-20 05:06:58
【问题描述】:

我正在尝试编写一些代码,这些代码将在一个列表中运行,未排序,找到最小的数字,而不是将其移动到结果中。它将执行此操作,直到 unsorted 变为空。基本上,一个排序程序。

我是否正确地将 findMin 函数放入了electionSort 函数的循环中?

如何获取返回值并将其附加到新列表中?

unsorted = [4, -9, 10, 2, 3.7, -20, 0]
result = []


def findMin(l):
    l = unsorted
    if len(l) == 0:
        return None
    min = l[0]      
    for i in range (len(l)):   
        if l[i] < min:
            min = l[i]
    return min




def selectionSort():
    for a in range (len(unsorted)):
        findMin(l)
        result.append(min)
    print(result)    

selectionSort()    

【问题讨论】:

  • 那行不通。在调用 findMin 之前,l 没有任何值。此外,您永远不会从 l 或 unsorted 中取出任何值。

标签: python list append


【解决方案1】:

如果您每次都找到最小值并将其放入新列表中,则需要先从原始列表中删除该最小值,然后再找到另一个最小值。列表中的删除函数按值删除。

def selectionSort():
    for a in range (len(unsorted)):
        min = findMin(unsorted)
        result.append(min)
        unsorted.remove(min)
    print(result)    

输出:

[-20, -9, 0, 2, 3.7, 4, 10]

【讨论】:

    【解决方案2】:

    您只需要将它传递给append 函数,但您还需要将列表作为参数传递给selectionSort 函数:

    def selectionSort(l):
        for a in range (len(l)):
            result.append(findMin(l))
        print(result)
    

    但是你的函数仍然有很多问题,你可以使用它作为一个更 Pythonic 的方式来实现选择排序:

    递归选择排序

    def sel_sort_rec(seq, i):
        if i==0: return       
        max_j = i
        for j in range(i):
            if seq[j] > seq[max_j]: max_j = j
        seq[i], seq[max_j] = seq[max_j], seq[i]
        sel_sort_rec(seq, i-1)
    

    选择排序

    def sel_sort(seq):
        for i in range(len(seq)-1,0,-1):
           max_j = i
           for j in range(i):
               if seq[j] > seq[max_j]: max_j = j
           seq[i], seq[max_j] = seq[max_j], seq[i]
    

    【讨论】:

    • 现在的输出是,[-20, -20, -20, -20, -20, -20, -20] >>>
    • 是的!问题出在你的函数中,我会更新答案!
    • 我编辑了答案,但您的选择功能仍然有问题!你需要在函数中定义result list local !
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-29
    • 1970-01-01
    • 2016-08-11
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多