파이썬에서리스트의 가장 일반적인 요소


13

이것은 주요 주제에 관한 파이썬 골프에 대한 팁 질문입니다.

파이썬에서 목록의 가장 일반적인 요소를 가능한 가장 짧은 방법으로 얻는 가장 짧은 방법을 찾고 있습니다. 다음은 목록이 변수라고 가정하고 시도한 것입니다 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

답변:


5

이건 어때?

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

[*...]목록을 얻으려면 동봉 하십시오.


아 맞다, 나는 고유 한 목록 또는 세트가 필요하다
musicman523

@ musicman523 왜 업데이트 l.count(max(l,key=l.count))했습니까? max(map(l.count,l))더 짧은
Uriel

아아, 나는 그것을 생각하지 않았다, 감사합니다!
musicman523
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.