Encuentra el elemento más común en una lista.

Resuelto hoju asked hace 15 años • 27 respuestas

¿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'
hoju avatar Oct 05 '09 13:10 hoju
Aceptado

Una frase más sencilla:

def most_common(lst):
    return max(set(lst), key=lst.count)
newacct avatar Oct 05 '2009 07:10 newacct

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)
Alex avatar Jan 01 '2014 20:01 Alex