Python: Obtener elemento más frecuente en la lista

Tengo una lista de tuplas, y quiero obtener la tupla más frecuente, PERO si hay “ganadores conjuntos”, debería elegir entre ellas al azar.

tups = [ (1,2), (3,4), (5,6), (1,2), (3,4) ] 

así que quiero algo que devuelva cualquiera de los dos (1,2) o (3,4) al azar para la lista anterior

Primero puede usar Contador para encontrar la tupla más repetida. Luego, encuentra las tuplas requeridas y finalmente selecciona al azar y obtén el primer valor.

 from collections import Counter import random tups = [ (1,2), (3,4), (5,6), (1,2), (3,4) ] lst = Counter(tups).most_common() highest_count = max([i[1] for i in lst]) values = [i[0] for i in lst if i[1] == highest_count] random.shuffle(values) print values[0] 

Utilizar collections.Counter .

 >>> collections.Counter([ (1,2), (3,4), (5,6), (1,2), (3,4) ]).most_common()[0] ((1, 2), 2) 

Esto es O(n log(n)) .

Primero puede ordenar la lista para obtener las tuplas ordenadas por frecuencia. Después de eso, un escaneo lineal puede obtener la tupla más frecuente de la lista. O(nlogn) total O(nlogn)

 >>> tups = [ (1,2), (3,4), (5,6), (1,2), (3,4) ] >>> >>> sorted(tups) [(1, 2), (1, 2), (3, 4), (3, 4), (5, 6)] 

Este debe hacer su tarea en o(n) tiempo:

 >>> from random import shuffle >>> from collections import Counter >>> >>> tups = [(1,2), (3,4), (5,6), (1,2), (3,4)] >>> c = Counter(tups) # count frequencies >>> m = max(v for _, v in c.iteritems()) # get max frq >>> r = [k for k, v in c.iteritems() if v == m] # all items with highest frq >>> shuffle(r) # if you really need random - shuffle >>> print r[0] (3, 4) 

Contando con collections.Counter y luego elección aleatoria de los más comunes:

 import collections import random lis = [ (1,2), (3,4), (5,6), (1,2), (3,4) ] # Test data cmn = collections.Counter(lis).most_common() # Numbering based on occurrence most = [e for e in cmn if (e[1] == cmn[0][1])] # List of those most common print(random.choice(most)[0]) # Print one of the most common at random