如何从数组中获取出现最多的对象

3 投票
9 回答
662 浏览
提问于 2025-04-15 18:47

我有一个包含多个对象的数组,其中有一些对象是相似的。例如:fruit = [苹果, 橙子, 苹果, 香蕉, 香蕉, 橙子, 苹果, 苹果]

那么,怎样才能最快找到这个数组中出现次数最多的对象呢?在这个例子中,答案是“苹果”,但我们该怎么有效地计算出这个结果呢?

9 个回答

3

保持一个字典,用来记录每个对象出现的次数。

遍历这个列表一次,建立这个表格。在这个过程中,记下到目前为止哪个对象出现得最多。

这段代码还没有经过测试。

from collections import defaultdict

def mode(objects):
    h = defaultdict(int)
    max_f = 0
    max_obj = None
    for o in objects:
        f = h[o] = h[o] + 1
        if f > max_f:
            max_f = f
            max_obj = o
    return max_obj

如果这些对象不能被哈希,你可以选择哈希它们的一些独特特征,比如 id(o)

5

如果这些对象是可以哈希的,那么你就可以用字典来存储它们的计数:

results = {}
for item in somelist:
  if item not in results:
    results[item] = 1
  else
    results[item] += 1

print max(results.iteritems(), key=operator.itemgetter(1))
8

别重复造轮子。在Python 2.7及以上版本中,你可以使用Counter类

import collections
fruit=['apple', 'orange', 'apple', 'banana', 'banana', 'orange', 'apple', 'apple']
c=collections.Counter(fruit)
print(c.most_common(1))
# [('apple', 4)]

如果你使用的是旧版本的Python,可以在这里下载Counter

虽然自己实现这样的功能是个好主意,但习惯使用Counter也是很重要的,因为它是(或者将会成为)标准库的一部分。

撰写回答