Obtención del elemento menos común en la matriz.

Para encontrar lo más común, sé que puedo usar algo como esto:

most_common = collections.Counter(array).most_common(to_find) 

Sin embargo, parece que no puedo encontrar nada comparable, para encontrar el elemento menos común.

¿Podría por favor obtener recomendaciones sobre cómo hacerlo.

Pedir prestado el origen de collections.Counter.most_common e invertir según corresponda:

 from operator import itemgetter import heapq import collections def least_common_values(array, to_find=None): counter = collections.Counter(array) if to_find is None: return sorted(counter.items(), key=itemgetter(1), reverse=False) return heapq.nsmallest(to_find, counter.items(), key=itemgetter(1)) >>> data = [1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4] >>> least_common_values(data, 2) [(1, 2), (2, 4)] >>> least_common_values([1,1,2,3,3]) [(2, 1), (1, 2), (3, 2)] >>> 

most_common sin ningún argumento devuelve todas las entradas, ordenadas de lo más común a lo menos.

Entonces, para encontrar lo menos común, comienza a verlo desde el otro extremo.

Qué pasa

 least_common = collections.Counter(array).most_common()[-1] 
 def least_common_values(array, to_find): """ >>> least_common_values([1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4], 2) [(1, 2), (2, 4)] """ counts = collections.Counter(array) return list(reversed(counts.most_common()[-to_find:])) 

Supongo que necesitas esto:

 least_common = collections.Counter(array).most_common()[:-to_find-1:-1] 

La forma más fácil de implementar la búsqueda del mínimo en un Iterable es la siguiente:

 Counter(your_iterable).most_common()[-1] 

Eso devuelve una tupla bidimensional que contiene el elemento en la primera posición y el recuento de ocurrencias en la segunda posición.

Yo sugeriría lo siguiente,

 least_common = collections.Counter(array).most_common()[len(to_find)-10:len(to_find)] 

Puede utilizar una función clave:

 >>> data=[1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4] >>> min(data,key=lambda x: data.count(x)) 1 >>> max(data,key=lambda x: data.count(x)) 4 

Basado en esta respuesta para los elementos más comunes: https://stackoverflow.com/a/1518632

Aquí hay un liner para obtener el elemento menos común en una lista:

 def least_common(lst): return min(set(lst), key=lst.count)