Éléments les plus courants d'une liste en Python


13

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.countpour 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))}

Connexes , mais ne fait pas ce dont j'ai besoin
musicman523

Réponses:


5

Celui-ci, ça va?

c=l.count;{x for x in l if c(x)==max(map(c,l))}

Joignez-vous à [*...]pour obtenir une liste.


Oh
oui

@ musicman523 pourquoi avez-vous mis à jour avec l.count(max(l,key=l.count))? max(map(l.count,l))est plus court
Uriel

Ahhhh je n'y ai pas pensé, merci!
musicman523
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.