如何从数组中获取表示最多的对象

esp*_*akk 3 python arrays algorithm performance list

我有一个包含一些对象的数组,并且有几个相似的对象.例如:水果= [苹果,橙子,苹果,香蕉,香蕉,橙子,苹果,苹果]

从这个数组中获取代表性最高的对象的最有效方法是什么?在这种情况下,它将是"苹果",但你会如何以有效的方式出去计算?

unu*_*tbu 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)]
Run Code Online (Sandbox Code Playgroud)

如果您使用的是旧版本的Python,则可以Counter 在此处下载.

虽然知道如何自己实现这样的事情是很好的,但是习惯使用Counter也是一个好主意,因为它是(或将成为)标准库的一部分.


Ign*_*ams 5

如果对象是可清洗的,那么您可以使用dict来存储计数:

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))
Run Code Online (Sandbox Code Playgroud)