Questa è una domanda di consigli per giocare a golf in Python, che è in tema principale.
Sto cercando il modo più breve per ottenere tutti gli elementi più comuni di un elenco in Python, nel modo più breve possibile. Ecco cosa ho provato, supponendo che l'elenco si trovi in una variabile chiamata l
:
from statistics import*
mode(l)
Questo genera un errore se ci sono più modalità.
max(l,key=l.count)
Questo restituisce solo 1 oggetto, ho bisogno di ottenere tutti gli elementi di maggior valore.
from collections import*
Counter(l).most_common()
Questo restituisce un elenco di tuple di (element, count)
, ordinate per conteggio. Da questo ho potuto estrarre tutti gli elementi il cui conteggio corrispondente è uguale al primo, ma non vedo un modo di giocare a golf molto meglio di:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
Sono sicuro che c'è un modo più breve!
Inoltre, se può essere fatto senza assegnazione di variabili o usi multipli di l
, posso mantenere il resto del codice come espressione lambda per salvare più byte.
Modifica: per il suggerimento di @Uriel, possiamo fare:
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
E posso alias list.count
per pochi byte:
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@Uriel ha sottolineato che possiamo ottenere un paio di byte in più con map
:
c=l.count;{s for s in l if c(s)==max(map(c,l))}