Ceci est une question de conseils pour le golf en Python, qui est sur le thème principal.
Je cherche le moyen le plus court pour obtenir tous les éléments les plus courants d'une liste en Python, de la manière la plus courte possible. Voici ce que j'ai essayé, en supposant que la liste se trouve dans une variable appelée l
:
from statistics import*
mode(l)
Cela génère une erreur s'il existe plusieurs modes.
max(l,key=l.count)
Cela ne renvoie que 1 article, j'ai besoin d'obtenir tous les éléments du plus grand nombre.
from collections import*
Counter(l).most_common()
Cela renvoie une liste de tuples de (element, count)
, triés par nombre. De cela, je pourrais tirer tous les éléments dont le nombre correspondant est égal au premier, mais je ne vois pas un moyen de jouer au golf beaucoup mieux que:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
Je suis sûr qu'il y a un chemin plus court!
De plus, si cela peut être fait sans affectation de variable ou utilisations multiples de l
, je peux conserver le reste du code comme une expression lambda pour économiser plus d'octets.
Edit: Selon la suggestion de @ Uriel, nous pouvons faire:
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
Et je peux alias list.count
pour quelques octets:
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@Uriel a souligné que nous pouvons obtenir quelques octets supplémentaires avec map
:
c=l.count;{s for s in l if c(s)==max(map(c,l))}
Réponses:
Celui-ci, ça va?
Joignez-vous à
[*...]
pour obtenir une liste.la source
l.count(max(l,key=l.count))
?max(map(l.count,l))
est plus court