2015-09-02 71 views

回答

3

把你的名单分成一个collections.Counter() object并请它替顶部结果:

from collections import Counter 

def maximum_number(lst): 
    return Counter(lst).most_common(1)[0][1] 

Counter.most_common() method返回前N个结果进行计数;上面的代码要求提供1顶的结果,需要从返回的列表中的一个结果,而仅提取计数:

>>> from collections import Counter 
>>> lst = [4, 5, 6, 5, 2] 
>>> Counter(lst) 
Counter({5: 2, 2: 1, 4: 1, 6: 1}) 
>>> Counter(lst).most_common(1) 
[(5, 2)] 
>>> Counter(lst).most_common(1)[0] 
(5, 2) 
>>> Counter(lst).most_common(1)[0][1] 
2 
+0

我还没有使用任何其他方式之前? –

+0

是的,还有其他的方法,但'计数器'是一种规范的解决方案,没有理由做别的事情。只需阅读[计数器]的文档(https://docs.python.org/3/library/collections.html#collections.Counter)。 – Matthias

+0

@ R.I:您必须使用字典(键是列表中的值,值是您看到该值的次数)手动计数,然后从中获取最大计数。由于Counter是一个字典对象,实际上,在这里重新发明轮子没有多大意义。 –

1

这可以帮助你..

lst = [4, 5, 6, 5, 2]  
max([lst.count(i) for i in lst]) 
+1

这是非常低效的,执行O(N^2)个步骤。 10个元素是100步,1000个步骤等等。 –

0

使用计数器如图所示效果很好。但是,它无助于理解模式。因此,这里是一个食谱做手工

  1. 创建一个空的字典
  2. 循环输入//列表
  3. 找到该值,如键,在字典
    • ,如果它存在,增加一个
    • 其他值添加它,以1

当循环完成后,发现在字典的最高值,并使用它的关键

这一切都可以使用dict.get(key, 0)+1dict.iteritems()在Python有效地完成,(对于Python-2;项目(),为Python-3)。