【问题标题】:how to find how many times the highest number in a list appeared using python? [duplicate]如何使用python查找列表中最高数字出现的次数? [复制]
【发布时间】:2020-11-09 14:15:38
【问题描述】:

例如 如果列表是:list = [1, 2, 3, 4, 4] 如何计算数字 4 出现的次数,而不指定它。使用max(list) 或类似的东西。

【问题讨论】:

  • “不指定”是什么意思?
  • 这能回答你的问题吗? How can I count the occurrences of a list item?
  • 你的意思是不能使用max函数?
  • 希望你可以修改if语句来实现this answer的计数器。提示:当找到新的最大值时重置计数器并在下一项等于最大值时递增计数器。
  • 因为在下面的答案中似乎对此有些困惑:您能否澄清问题标题中“最高数字”的含义?它是最大的元素还是出现次数最多的元素? IE。对于[1,2,3,4,4,5]4 还是5

标签: python list max


【解决方案1】:

max试试这个:

l = [1,2,3,4,4]
num = max(l, key=lambda x:l.count(x))  # num will be 4

你可以得到num的计数。

l.count(num)  # this wil returns 2

另一方面,正如@buddemat 所说(Here),最好:

from collections import Counter      
                                                                                                                                                                                                                                         
l = [1,2,3,4,4]
c = Counter(l)  
c.most_common()[0]

会给你

(4,2) # 4 is a maximum number and 2 is number of occurrence.

还要注意:

不要使用list 作为变量名,list 是在 python 中预定义的,您将覆盖它自己的功能。

【讨论】:

  • 出于性能原因,最好不要为列表中的每个元素调用count,因为这将为每个元素扫描一次完整列表。 Counter 方法在性能方面要好得多 (cmp.stackoverflow.com/questions/2600191/…)。
  • 很好的评论@buddemat。我会在我的回答中提到它。
  • 任务不是数最常见的数,而是数最高的数。
【解决方案2】:

虽然直接的解决方案是先找到最大值然后计算它,但您可以通过以下方式一次性完成这两项操作:

import functools
list = [1, 2, 3, 4, 4]
(max, count) = functools.reduce (
  lambda x, y:
    (y, 1) if x [0] is None or x [0] < y
    else x if x [0] > y
    else (x [0], x [1] + 1),
  list,
  (None, 0))
print (max, count)

此解决方案为空列表返回 None, 0

【讨论】:

  • 不错的方法
  • 嘿 Mikhail,我能知道这个方法的时间复杂度是 O(n) 吗?
  • 是的,但是迭代两次的方法也有 O(n) 复杂度。
【解决方案3】:
def get_max_occ(l):    
    max_i = None
    for i in l:
        if max_i is not None:
            if i > max_i:
                max_i = i
                occ = 1
            else:
                occ += 1
        else:
            max_i = i
            occ = 1
    return occ

【讨论】:

  • 请不要只写你的代码。你也需要给个解释!
【解决方案4】:

首先,找到最大值并使用计数

l1 =  [1, 2, 3, 4, 4] 
maximum = max(l1)
count = l1.count(maximum)

你可以自己替换最大值函数。如果您不喜欢使用内置功能,请按照以下方式使用

def max(l1):
  maximum = l1[0]
  for el in l1:
   if maximum< el:
     maximum = el
  return maximum

上面的函数会迭代地检查列表中的每个元素。

def maximum(l1):
    if len(l1)  == 1:
        return l1[0]
    if len(l1) == 2:
        if l1[0]> l1[1]:
            return l1[0]
        else:
            return l1[1]
    
    else:
        
        max1 = maximum(l1[:len(l1)//2])
        max2 = maximum(l1[len(l1)//2:])
        if max1 > max2:
            return max1
        else:
            return max2

上面的函数是使用分治法求最大的时间复杂度为logn

【讨论】:

  • 此解决方案迭代列表两次。请参阅我的解决方案,了解如何一次性完成。
猜你喜欢
  • 2020-07-24
  • 2023-03-17
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2020-11-10
  • 2018-05-08
相关资源
最近更新 更多