Najczęstsze elementy listy w Pythonie

13

To jest pytanie z poradami do gry w golfa w Pythonie, które jest na temat main.

Szukam najkrótszego sposobu, aby uzyskać wszystkie najczęstsze elementy listy w Pythonie, w najkrótszy możliwy sposób. Oto, co próbowałem, zakładając, że lista jest w zmiennej o nazwie l:

from statistics import*
mode(l)

To powoduje błąd, jeśli istnieje wiele trybów.

max(l,key=l.count)

To zwraca tylko 1 przedmiot, muszę zdobyć wszystkie elementy największej liczby.

from collections import*
Counter(l).most_common()

Zwraca listę krotek (element, count)posortowanych według liczby. Z tego mógłbym wyciągnąć wszystkie elementy, których odpowiadająca liczba jest równa pierwszemu, ale nie widzę sposobu na grę w golfa tak znacznie lepiej niż:

from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]

Jestem pewien, że jest krótsza droga!

Ponadto, jeśli można tego dokonać bez przypisywania zmiennych lub wielokrotnego użycia l, mogę zachować resztę kodu jako wyrażenie lambda, aby zaoszczędzić więcej bajtów.

Edycja: Zgodnie z sugestią @ Uriela możemy:

{s for s in l if l.count(s)==l.count(max(l,key=l.count))}

I mogę alias list.countdla kilku bajtów:

c=l.count;{s for s in l if c(s)==c(max(l,key=c))}

@Uriel wskazał, że możemy uzyskać kilka dodatkowych bajtów za pomocą map:

c=l.count;{s for s in l if c(s)==max(map(c,l))}
musicman523
źródło
Powiązane , ale nie robi tego, czego potrzebuję
musicman523,

Odpowiedzi:

5

Co powiesz na ten?

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

Dołącz, [*...]aby uzyskać listę.

Uriel
źródło
No tak, potrzebuję unikalnej listy lub zestawu, dzięki
musicman523,
@ musicman523 dlaczego zaktualizowałeś l.count(max(l,key=l.count))? max(map(l.count,l))jest krótszy
Uriel
Ahhhh, nie myślałem o tym, dziękuję!
musicman523,