이것은 주요 주제에 관한 파이썬 골프에 대한 팁 질문입니다.
파이썬에서 목록의 가장 일반적인 요소를 가능한 가장 짧은 방법으로 얻는 가장 짧은 방법을 찾고 있습니다. 다음은 목록이 변수라고 가정하고 시도한 것입니다 l
.
from statistics import*
mode(l)
여러 모드가있는 경우 오류가 발생합니다.
max(l,key=l.count)
이것은 하나의 항목 만 반환하므로 가장 큰 수의 모든 요소를 가져와야합니다.
from collections import*
Counter(l).most_common()
(element, count)
카운트별로 튜플 목록을 반환합니다 . 이것으로부터 나는 해당 카운트가 첫 번째와 같은 모든 요소를 가져올 수는 있지만 이것을 골프보다 더 잘하는 방법을 보지 못합니다.
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
더 짧은 방법이 있다고 확신합니다!
또한 변수 할당이나 여러 번의 사용없이 수행 할 수 있다면 l
더 많은 바이트를 절약하기 위해 나머지 코드를 람다 식으로 유지할 수 있습니다.
편집 : @ Uriel의 제안에 따라 다음을 수행 할 수 있습니다.
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
그리고 list.count
몇 바이트의 별칭 을 사용할 수 있습니다 .
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@Uriel은 map
다음 과 같이 몇 바이트를 더 얻을 수 있다고 지적했습니다 .
c=l.count;{s for s in l if c(s)==max(map(c,l))}
Related , 그러나 내가 필요한 것을하지 않는다
—
musicman523