如何从数组中获取出现最多的对象
我有一个包含多个对象的数组,其中有一些对象是相似的。例如: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也是很重要的,因为它是(或者将会成为)标准库的一部分。