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.count
dla 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))}
Odpowiedzi:
Co powiesz na ten?
Dołącz,
[*...]
aby uzyskać listę.źródło
l.count(max(l,key=l.count))
?max(map(l.count,l))
jest krótszy