【问题标题】:Python: Output the most frequent number, and its quantityPython:输出最频繁的数字及其数量
【发布时间】:2021-04-17 13:36:31
【问题描述】:

所以,问题是,我有一个包含 30 个随机重复数字的列表,我必须找到最频繁的数字以及它重复了多少次。

例如:列表是 [10, 10, 11, 11, 1, 10, 5, 7, 19, 7, 3, 11, 7, 15, 16, 20, 9, 7, 4, 2, 3, 11, 20, 14, 5, 15, 2, 14, 20, 6] 从这个列表中,我期望显示的结果是 11, 4times 7, 4times。

我一直在尝试,但我似乎迷路了,除了制作 alist 和为 i in list 写作之外,我无法清楚地找到一种方法:

【问题讨论】:

  • 您想只显示一个计数最高的数字还是所有数字及其计数?
  • 欢迎来到 SO。这不是讨论论坛或教程。请使用tour 并花时间阅读How to Ask 以及该页面上的其他链接。花一些时间与the Tutorial 一起练习示例。它会让你了解 Python 提供的工具来帮助你解决问题。

标签: python python-3.x


【解决方案1】:

使用基础 Python 实现此目的的一种方法; 没有 itertoolscollections 将是:

d = {}
mylist = [1,1,2,2,2,3,3,3,3]

for i in set(mylist):
    d[i] = mylist.count(i)

然后,对dict进行排序,确定出现频率最高的等。

此答案是出于教育目的而发布的,展示了一种无需使用库即可完成此任务的较低级别的方法。

【讨论】:

    【解决方案2】:

    你可以试试这样的,

    import collections
    numbers = [1,2,2,3,3]
    data = collections.Counter(numbers)
    data_list = dict(data)
    max_value = max(list(data.values()))
    mode_val = [num for num, freq in data_list.items() if freq == max_value]
    if len(mode_val) == len(numbers):
        print("No mode in the list")
    else:
        print('mode: ',mode_val)
    x= {y:numbers.count(y) for y in mode_val}
    print('times: ',x)
    

    【讨论】:

      【解决方案3】:

      我还是个新手,我试过这个,它很有效,我希望你会觉得它很容易阅读。但是,我会赞成一个更简洁的解决方案,因为有经验的用户已经给出了:)

      from collections import Counter
      
      
      data = [10, 10, 11, 11, 1, 10, 5, 7, 19, 7, 3, 11, 7, 15, 16, 20, 9, 7, 4, 2, 3, 11, 20, 14, 5, 15, 2, 14, 20, 6]
      
      
      def most_frequent_number_finder(your_list):
          occurence_count = Counter(your_list)
          return occurence_count.most_common(1)[0][0]
      
      
      most_frequent_number = (most_frequent_number_finder(data))
      
      
      most_frequent_number_count  = data.count(most_frequent_number)
      
      
      print(f"Your most frequent number is {most_frequent_number} with a count of {most_frequent_number_count}")
      

      ##打印: 您最常见的数字是 11,计数为 4


      如果有重复的数字出现相同的情况,你会怎么做,需要考虑一下。

      【讨论】:

        【解决方案4】:

        这可以通过多种方式完成,这只是一种解决方案

        from statistics import multimode
        
        in_list = [10, 10, 11, 11, 1, 10, 5, 7, 19, 7, 3, 11, 7, 15, 16, 20, 9, 7, 4, 2, 3, 11, 20, 14, 5, 15, 2, 14, 20, 6]
        highest_frequency_nos = multimode(in_list)
        print(' '.join('{}, {}times'.format(item, in_list.count(item)) for item in highest_frequency_nos))
        

        in_list.count(element) 将返回指定元素在列表中出现的次数。

        参考: python statistics.multimode()

        【讨论】:

          【解决方案5】:

          这是我很久以前在尝试使用 Loto 号码生成器时编写的一些代码。

          # test random number generation
          print('   This program experiments with random number generation\n')
          #
          loop = int(input('Enter a number for generating set`s of 50 throws > '))
          print()
          #
          import random
          #
          x = 0
          #
          y = 0
          #
          throws = [[] for i in range (50)]
          #
          while loop > 0:
              print('vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv')
              print('                           loop value', loop)                  
              loop = loop -1
              for i in range(0, 50):
                  #
                  x = random.random()
                  #
                  #
                  x = x * 49 // 1
                  #
                  y = int(x)
                  #
                  #
                  throws [i] = y
                  #
              print('                     list of 50 throw`s')
                  #  
              print(throws)
              print()
              for i in range (0, 50):
                  #
                  if throws.count(i) >= 1:
                      #
                      print (throws.count(i), 'times ', i, 'thrown')
                  else:
                      print ('                   ', i, 'Not thrown')
          

          【讨论】:

            猜你喜欢
            • 2019-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-09
            • 1970-01-01
            • 1970-01-01
            • 2019-03-25
            相关资源
            最近更新 更多