Encuentra el elemento más común en una lista.
¿Cuál es una forma eficaz de encontrar el elemento más común en una lista de Python?
Es posible que los elementos de mi lista no sean hash, por lo que no puedo usar un diccionario. También en caso de empate se deberá devolver el artículo con el índice más bajo. Ejemplo:
>>> most_common(['duck', 'duck', 'goose'])
'duck'
>>> most_common(['goose', 'duck', 'duck', 'goose'])
'goose'
Una frase más sencilla:
def most_common(lst):
return max(set(lst), key=lst.count)
Tomando prestado de aquí , esto se puede usar con Python 2.7:
from collections import Counter
def Most_Common(lst):
data = Counter(lst)
return data.most_common(1)[0][0]
Funciona entre 4 y 6 veces más rápido que las soluciones de Alex y es 50 veces más rápido que el one-liner propuesto por newacct.
En CPython 3.6+ (cualquier Python 3.7+), lo anterior seleccionará el primer elemento visto en caso de empates. Si está ejecutando un Python antiguo, para recuperar el elemento que aparece primero en la lista en caso de empates, debe realizar dos pasadas para preservar el orden:
# Only needed pre-3.6!
def most_common(lst):
data = Counter(lst)
return max(lst, key=data.get)