【问题标题】:Python function to display the highest occurring number, if there is a tie return both. num = [1,2,3,2,1,2,2,4,5,4,4,4]Python 函数显示最高出现的数字,如果有平局则返回两者。数字 = [1,2,3,2,1,2,2,4,5,4,4,4]
【发布时间】:2021-06-18 03:12:09
【问题描述】:

我编写了这个 Python 代码来将键和值存储在字典中

num = [1,2,3,2,1,2,2,4,5,4,4,4] 
dict1 = {}
for val in num:
    if val in dict1:
      dict1[val] = dict1[val] + 1
    else:
        dict1[val] = 1;

print(max(dict1,key=dict1.get))

Max 函数返回它遇到的第一个值。如果出现平局,请告知该怎么做。

谢谢!

【问题讨论】:

  • max 只返回一个值

标签: python arrays list dictionary word-frequency


【解决方案1】:

我建议使用Counter

from collections import Counter

my_list = [1,2,3,2,1,2,2,4,5,4,4,4] 

highest = Counter(my_list).most_common()[0] # will be (2,4)

【讨论】:

    【解决方案2】:
    num = [1,2,3,2,1,2,2,4,5,4,4,4] 
    dict1 = {}
    maxfreq = 0
    for val in num:
        if val in dict1:
          dict1[val] = dict1[val] + 1
          if(dict1[val]>maxfreq):
                maxfreq = dict1[val]
        else:
            dict1[val] = 1
            if(dict1[val]>maxfreq):
                maxfreq = dict1[val]
                
    for i in dict1:
        if(dict1[i]==maxfreq):
            print(i)
    

    我基本上是存储最大频率的值并在字典中重复以打印其值与最大频率匹配的所有键。

    【讨论】:

      【解决方案3】:

      您可以添加此行以获取列表中的所有所需值。

      num = [1,2,3,2,1,2,2,4,5,4,4,4] 
      dict1 = {}
      for val in num:
          if val in dict1:
            dict1[val] = dict1[val] + 1
          else:
              dict1[val] = 1;
      
      maxkey = max(dict1,key=dict1.get)
      print([key for key in dict1 if dict1[key]==dict1[maxkey]])
      

      输出:

      [2, 4]
      

      【讨论】:

        【解决方案4】:

        在这里使用字典可能有点过头了。您可以在线性时间内实现此功能,而无需额外的模块。

        nums = [1,2,3,2,1,2,2,4,5,5,5,4,4] 
        
        def max_in_list(nums):
            max_list = []
            max_value = 0
            for i in nums:
                if i > max_value:
                    max_list = [i]
                    max_value = i
                elif i == max_value:
                    max_list.append(i)
            return max_list
        
        assert max_in_list(nums) == [5,5,5]
        
        print(max_in_list(nums))
        

        【讨论】:

          【解决方案5】:

          我想我一定错过了这里的重点,因为我看到了一些非常精细的解决方案来解决在我看来很简单的问题。

          def maxes(nums):
              return [m for m in nums if m == max(nums)]
          
          >>> nums = [1,2,3,2,1,2,2,4,5,5,5,4,4]
          >>> maxes(nums)
          [5, 5, 5]
          
          >>> nums = [1,2,3,2,1,2,2,4,5,5,5,4,4,6]
          >>> maxes(nums)
          [6]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-12-20
            • 2021-02-08
            • 2018-10-13
            • 2016-09-10
            • 2019-02-01
            • 2013-12-11
            • 1970-01-01
            相关资源
            最近更新 更多