方法
查找出现频率最高的项目(Counter.most_common)。然后在这些候选项中找到具有最小索引的项目(枚举成索引字典,min of {index: key}.iteritems())。
代码
从 @gnibbler 和 @Jeff 大量借鉴:
from collections import Counter
def most_frequent_first(events):
frequencies = Counter(events)
indexes = {event: i for i, event in enumerate(events)}
most_frequent_with_indexes = {indexes[key]: key for key, _ in frequencies.most_common()}
return min(most_frequent_with_indexes.iteritems())[1]
events = [123,123,456,456,456,123, 1, 2, 3, 2, 3]
print(most_frequent_first(events))
结果
>>> print(most_frequent_first(events))
456
代码
更好的代码将为您提供频率和索引,显示代码是否正确工作。这里是一个使用named_tuple实现的示例:
from collections import Counter, namedtuple
frequent_first = namedtuple("frequent_first", ["frequent", "first"])
def most_frequent_first(events):
frequencies = Counter(events)
indexes = {event: i for i, event in enumerate(events)}
combined = {key: frequent_first(value, indexes[key]) for key, value in frequencies.iteritems()}
return min(combined.iteritems(), key=lambda t: (-t[1].frequent, t[1].first))
events = [123,123,456,456,456,123, 1, 2, 3, 2, 3]
print(most_frequent_first(events))
结果
>>> print(most_frequent_first(events))
(456, frequent_first(frequent=3, first=4))
set(input_list)
然后计算该集合中每个元素出现的次数。 - CppLearner