Python 列表中频率最高的数字

Python 列表中频率最高的数字,python,python-3.x,python-2.7,list,counter,Python,Python 3.x,Python 2.7,List,Counter,我正在尝试编写一个程序,它将显示列表中最常出现的数字。我正在尝试在不导入任何库的情况下执行此操作。到目前为止,我有一些东西可以告诉我最频繁出现的次数,但我想要的是数字本身,而不是它出现的次数。我怎样才能用一种简单的方式来改变我目前所拥有的 def freq(L): st = [] L.sort() for i in L: st.append(L.count(i)) print max(st) 编辑:例如,freq([4,6,4,3,9,1,4])

我正在尝试编写一个程序,它将显示列表中最常出现的数字。我正在尝试在不导入任何库的情况下执行此操作。到目前为止,我有一些东西可以告诉我最频繁出现的次数,但我想要的是数字本身,而不是它出现的次数。我怎样才能用一种简单的方式来改变我目前所拥有的

def freq(L):
    st = []
    L.sort()
    for i in L:
        st.append(L.count(i))
    print max(st)
编辑:例如,freq([4,6,4,3,9,1,4])返回3,因为4出现了3次。但是我希望它返回4作为最常见的值。

试试字典

def freq(L):
     st = {}
     for i in set(L):
        st.update({L.count(i):i})
     print (st.get(max(st)))
或更短:

def freq(L):
    st={L.count(i):i for i in set(L)}
    print (st.get(max(st)))
另一个没有字典的解决方案:

def freq(L):
    a=0
    b=None
    for e in set(L):
        if L.count(e)>a:
            a=L.count(e)
            b=e
    print(b)
试试字典

def freq(L):
     st = {}
     for i in set(L):
        st.update({L.count(i):i})
     print (st.get(max(st)))
或更短:

def freq(L):
    st={L.count(i):i for i in set(L)}
    print (st.get(max(st)))
另一个没有字典的解决方案:

def freq(L):
    a=0
    b=None
    for e in set(L):
        if L.count(e)>a:
            a=L.count(e)
            b=e
    print(b)

list.count
具有O(n)复杂度,给定列表中的n个值。如果有m个唯一值,这意味着您的算法将具有最小的O(mxn)复杂度。这是不可取的

一个O(n)解决方案是创建一个计数字典,并在迭代时增加值:

lst = [1, 2, 3, 3, 3, 2, 1, 3, 3]

def freq(L):
    d = {}
    for num in L:
        d[num] = d.get(num, 0) + 1
    maxcount = max(d.values())
    return next(k for k, v in d.items() if v == maxcount)

freq(lst)  # 3
当然,对于
collections.Counter
来说,语法很简单:

from collections import Counter

def freq(L):
    return Counter(L).most_common()[0][0]

list.count
具有O(n)复杂度,给定列表中的n个值。如果有m个唯一值,这意味着您的算法将具有最小的O(mxn)复杂度。这是不可取的

一个O(n)解决方案是创建一个计数字典,并在迭代时增加值:

lst = [1, 2, 3, 3, 3, 2, 1, 3, 3]

def freq(L):
    d = {}
    for num in L:
        d[num] = d.get(num, 0) + 1
    maxcount = max(d.values())
    return next(k for k, v in d.items() if v == maxcount)

freq(lst)  # 3
当然,对于
collections.Counter
来说,语法很简单:

from collections import Counter

def freq(L):
    return Counter(L).most_common()[0][0]

下面是一种使用列表理解的方法:

mostFrequentNumber=L[max([(枚举(L)中i,d的L.count(d),i)])[1]]

要分解它:

我们迭代列表的枚举版本:
i,枚举(L)
中的d,它将生成具有值和索引的元组。然后我们创建一个元组列表,其中包含
d
count
和索引
i
(L.count(d),i)
。我们使用Max函数来获得计数最高的一个。然后,我们使用元组中索引
[1]
处的最大值对列表
L
进行索引


此输入:
L=[1,1,1,2,3,4]
将产生1,尽管可能不是最有效的。

下面是一种使用列表理解的方法:

mostFrequentNumber=L[max([(枚举(L)中i,d的L.count(d),i)])[1]]

要分解它:

我们迭代列表的枚举版本:
i,枚举(L)
中的d,它将生成具有值和索引的元组。然后我们创建一个元组列表,其中包含
d
count
和索引
i
(L.count(d),i)
。我们使用Max函数来获得计数最高的一个。然后,我们使用元组中索引
[1]
处的最大值对列表
L
进行索引


此输入:
L=[1,1,1,2,3,4]
将产生1,尽管可能不是最有效的。

可能是浮点数或严格的整数?使用
集合。计数器
替换您编写的大部分代码,这将为您提供一个包含列表中每个项目频率的dict。反转指令。将
max
应用于按键。现在只需将其用作反向dict的索引。这将返回一个最频繁的项。当您说“不导入任何库”时,是否包括标准库中的模块,如?如果是这样的话,你为什么要避开那些库呢?这是一个学习练习吗?嗨,你能举一个输入数据和你想要输出的例子吗?@Prune,注意
计数器
有一个
最常用的
方法,这意味着无需手动计算最大值。可能是浮点数或严格整数?使用
集合。计数器
替换您编写的大部分代码,这将为您提供一个dict,其中包含列表中每个项目的频率。反转指令。将
max
应用于按键。现在只需将其用作反向dict的索引。这将返回一个最频繁的项。当您说“不导入任何库”时,是否包括标准库中的模块,如?如果是这样的话,你为什么要避开那些库呢?这是一个学习练习吗?嗨,你能举一个输入数据和你想要输出的例子吗?@Prune,注意
计数器
有一个
最常用的
方法,这意味着不需要手动计算最大值。