2011-01-20 13 views
16

Per trovare il più comune, so che posso usare qualcosa di simile:Ottenere l'elemento meno comune nella gamma

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

Tuttavia, io non riesco a trovare qualcosa di paragonabile, per trovare l'elemento meno comune .

Potrei ricevere consigli su come fare.

risposta

10

Prendendo in prestito la fonte di collections.Counter.most_common e invertendo a seconda dei casi:

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)] 
>>> 
22

most_common senza argomenti restituisce tutte le voci, ordinate dal più comune al meno.

Quindi, per trovare il meno comune, basta iniziare a guardarlo dall'altra parte.

+0

Ahh eccellente, capisco ora. Grazie. – jimy

4
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:])) 
+0

Eccellente. Grazie. – jimy

4

Che dire

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

È possibile utilizzare una funzione chiave:

>>> 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 
1

te immagino necessario questo:

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

Vorrei suggerire come segue,

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

Sulla base di questa risposta per gli elementi più comuni: https://stackoverflow.com/a/1518632

Ecco un uno di linea per ottenere l'elemento meno comune in un elenco:

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