列表中最大项目的出现次数

时间:2016-07-27 06:58:23

标签: python

假设我有list

L= [3 2 1 3 5 4 5 3 5 3]

输出应该是3,因为5在列表中是最大值,因为它的号码是。出现次数为3

我能够尝试到现在为止

from collections import defaultdict

d = defaultdict(int)
for i in height:
    d[i] += 1
result = max(d.iteritems(), key=lambda x: x[1])
print len(result)

但是这不适用于每个列表,因为它只给出列表中项目的最大出现次数,但有时它不是最大项目。

3 个答案:

答案 0 :(得分:3)

使用std::getlinemax

list.count

答案 1 :(得分:2)

您选择了最大计数,而不是最大。你可以通过将key参数放到max()来解决这个问题,然后只打印结果(而不是它的长度,即 总是为2! ):

result = max(d.iteritems())
print result  # prints the (maxvalue, count) pair.

或者,打印result[1]只打印最大值的计数。

使用collections.Counter() object计算您的商品数量,然后在其中找到最大键值对:

from collections import Counter

counts = Counter(L)
max_key, max_key_count = max(counts.iteritems())
print max_key_count

与您自己一样,这是一种O(KN)方法,其中K是L的长度,N是唯一项目的数量。这比max_element = max(L); count = L.count(max_element)方法稍微有效一点,因为它避免了遍历所有L两次。哪一个在实践中更快取决于NK的影响程度。

答案 2 :(得分:1)

检查此代码: -

L= [3, 2, 1, 3, 5, 4, 5, 3, 5, 3]
newDict = {}
for i in L:
   newDict.setdefault(i,0)
   newDict[i]+=1

 filter( lambda x : (newDict[x] == max(newDict.values())) ,newDict)[0]