从列表中返回第x个最大元素(Python)

时间:2014-08-04 21:38:09

标签: python list sorting

我想编写一个带有两个参数的函数returnMlargest:列表L和数字m。它返回该列表中m个最大的数字。假设列表中的所有元素都不同。

例如,如果我returnMlargest([6,2,5,4,3,7], 4), 它将返回该列表中的第4个最大元素,即4。

如果我先对列表进行排序,我知道如何编码。但是,我想知道如何在不对列表进行排序的情况下执行此操作。我必须为此编写一个while循环或嵌套循环。

请!这不是作业或作业!这是决赛的练习测试!我知道我是编程中的菜鸟,因为我的问题可能不太好。但是嘿!人不是天生就是编程天才!

3 个答案:

答案 0 :(得分:1)

为了帮助你,这里有一些伪代码

def return_m_largest(a_list, m):
    make a copy of a_list  # unless it's okay to mutate the list
    for _ in range(m - 1):
        find the max and get rid of it
    return the highest number in the list

对于大型列表来说这将是非常低效的,但是我怀疑这是家庭作业,它可能不会用非常大的列表进行测试。但是,如果你能够实现这一点,你应该能够根据你的需要进行优化。

答案 1 :(得分:0)

首先,我会说排序列表是最有效的方法。

但是,如果你想使用两个循环,你可以这样做:

int returnMlargest(int[] array, int m){

    int tempLargest, indexLargest;

    for(int x=0; x < m ; x++){ //remove m-1 of the largest elements

        tempLargest = indexLargest = 0; //reset largest counter

        for(int y=0; y< array.length; y++){

            if(array[y] > tempLargest){
                tempLargest = array[y];
                indexLargest = y;
            }
        }
        if( x == m - 1)
            return tempLargest; //result found

        //remove largest value from array, and repeat
    }
}

答案 2 :(得分:0)

def returnMlargest(l, M):
    cc = compile(';'.join(['list.remove(l, max(l))']*M), 'abc', 'single')
    eval(cc)
    for i in range(1):
        for i in range(1):
            pass
        return max(l)
  
    
      

returnMlargest([1,2,4,3,7,6,5],3)       4

    
  

NB。 * M * th最大值使用基于0的计数,因此在我的示例中, 7 是第0个最大数字,因此 4 是第3个最大数字。

它没有明确地对列表进行排序,它在技术上包括一个嵌套循环(虽然它可能会被优化掉)。

这不是一个家庭作业的答案(它会失败),这是一个练习答案,因为我从未使用过&#39;编译&#39;之前和eval()不会直接在多行语句上工作。

你的问题的真正答案也包含在我的答案中。 I want to know how can I do it without sorting the list以及look for the largest number and get rid of it, M times over