Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 序列中最大的3个数字_Python_Python 3.x_List_Tuples_Sequence - Fatal编程技术网

Python 序列中最大的3个数字

Python 序列中最大的3个数字,python,python-3.x,list,tuples,sequence,Python,Python 3.x,List,Tuples,Sequence,我试图找出序列中最大的3个值,但从我的代码中,我不明白如果我把它们放入最大的3([9,6,4,1,2,3,10,8,7]),它会给出[6,9,10]而不是[8,9,10]的答案。根据我的理解,根据我的代码,我将让最大的_3是序列中的某个随机数,如果该数与最大的_2和最大的值不同,它将替换当前最大的_3数。但是从这个代码来看,如果有一个重复的数字,我的代码将不起作用。如何重写代码,使代码能够找出序列中最大的三个数字,并允许重复最大的数字 我可以创建一个元组来返回我的答案和一个列表,但不允许修改原始

我试图找出序列中最大的3个值,但从我的代码中,我不明白如果我把它们放入最大的3([9,6,4,1,2,3,10,8,7]),它会给出[6,9,10]而不是[8,9,10]的答案。根据我的理解,根据我的代码,我将让最大的_3是序列中的某个随机数,如果该数与最大的_2和最大的值不同,它将替换当前最大的_3数。但是从这个代码来看,如果有一个重复的数字,我的代码将不起作用。如何重写代码,使代码能够找出序列中最大的三个数字,并允许重复最大的数字

我可以创建一个元组来返回我的答案和一个列表,但不允许修改原始序列

def largest_three(seq):
    largest = seq[0]
    largest_2 = seq[0]
    largest_3 = seq[1]
    answer = []
    for num,item in enumerate(seq):
        if seq[num] > largest:
            largest = seq[num]
 
    for num,item in enumerate(seq):
        if seq[num] > largest_2 and not largest:
            largest_2 = seq[num]
            
    for num,item in enumerate(seq):
        if seq[num] > largest_3 and not largest_2 and not largest:
            largest_3 = seq[num]
    answer.append(largest_3)
    answer.append(largest_2)
    answer.append(largest)
    return answer

我建议使用
numpy.partition
,它完全满足您的需要。查看文档。

对于一个相对简单的任务来说,这是大量的代码。实际上,您可以使用一些更简洁的代码来实现这一点,方法是对列表的副本进行排序,然后只返回最后三个值

oldList
参数显然就是要检查的列表。对于其他两个参数(默认为true),
allowDupes
将在获取最高三个值时保留重复项(否则将被删除),而
highToLow
将以降序(否则升序)返回最高项:

正如预期的那样,这将带来:

(10, 9, 8)
(10, 9, 9)
(10, 9, 8)
(9, 9, 10)
(8, 9, 10)
此代码涵盖了除第一条之外的所有需求(如果您始终允许重复,则它甚至涵盖了该需求):

  • 返回最大的三个值(是否重复)
  • 不修改原始列表
  • 只创建一个额外的列表和一个返回的元组(除非需要删除重复项,在这种情况下,它还会创建一个集合)

您的代码有两个问题:

  • 初始化最大的3个数字时,您应该
  • max=seq[0]
    最大值2=序号[1]#此处的指数为0
    最大值3=序列[2]#这里的指数是1
    
  • 在第二个和第三个for循环中,第一个if语句的条件是正确的,但是后面的条件不是<代码>非最大值对于任何整数
    最大值
    只要在整数不为0时返回true即可。您应该改为使用此选项:
  • 如果seq[num]>最大的_2和seq[num]!=最大的:
    

    如果seq[num]>最大的_3和seq[num]!=最大_2和顺序[num]!=最大的:
    
  • 最后,您的功能将在上述两个更改后工作:
  • def最大值_三(seq):
    最大值=序号[0]
    最大值2=序号[1]
    最大值3=序号[2]
    答案=[]
    对于num,枚举中的项(seq):
    如果seq[num]>最大值:
    最大值=序号[num]
    对于num,枚举中的项(seq):
    如果seq[num]>最大_2和seq[num]!=最大的:
    最大值2=序号[num]
    对于num,枚举中的项(seq):
    如果seq[num]>最大的_3和seq[num]!=最大_2和顺序[num]!=最大的:
    最大值3=序号[num]
    答案.附加(最大的3)
    答案.追加(最大的2)
    回答:追加(最大)
    回覆
    
    控制台:

    >>最大的三个([9,6,4,1,2,3,10,8,7])
    [8, 9, 10]
    

    如果允许使用排序的
    最简单的方法:

    res=sorted([9,6,4,1,2,3,10,8,7],reverse=True)[:3]
    
    如果对列表的前三个数字进行显式排序,则算法将正常工作。我猜你的意思是做
    最大的3=seq[2]
    而不是
    seq[1]
    。我想你的意思也是
    和seq[num]!=最大的
    而不是最大的
    (第三个循环也是如此)。如果我的答案对您有帮助,请告诉我,谢谢!如果最大的三个值不按顺序排列怎么办<代码>[10,7,6,5,3,2,1]-根据OP-应该返回
    [5,6,7]
    而不是
    [6,7,10]
    @Chase:“序列中最大的3个值”
    [10,7,6,5,3,2,1]
    6,7,10
    ,而不是
    5,6,7
    。我不知道你为什么认为后者是正确的,OP根本没有提到那个案例。@Chase我想你误解了OP的意思。输入列表中提到的“序列”操作。如果不特别注意最大三个数字不在列表中的列表,
    sorted
    方法将无法工作sequence@Chase,你需要解释清楚一点,因为排序是把它们按顺序排列的。@paxdiablo我认为顺序中的最大值意味着同样是数字的最大3个值order@Chase,我假设从你的评论到我的答案,你的意思是连续的,而不是数字顺序,因为100、200、300满足后者而不是前者。无论如何,我不认为这是正确的解释,OP只要求最大的三个值;(2)仅使用索引时枚举索引和键。但我很难投你反对票,因为这是一个问题:——)
    (10, 9, 8)
    (10, 9, 9)
    (10, 9, 8)
    (9, 9, 10)
    (8, 9, 10)