목록에서 중복 항목을 제거하고 개수별로 정렬 하시겠습니까? (파이썬 3)
Aug 19 2020
목록에서 모든 중복 항목을 제거하고 개수를 기준으로 정렬하려면 어떻게합니까?
s = ["foo", "this", "lem", "foo", "lem"]
s = ["foo", "ebh", "wosv", "wosv", "ebh", "4whcu"]
#should return
>>> ["foo", "lem", "this"]
>>> ["ebh", "wosv", "foo", "4whcu"]
규칙 :
- 바이트 크기 측면에서 아래 코드보다 짧아야합니다.
- 순서는 내림차순의 개수를 기준으로해야합니다.
- 같은 개수의 현이 두 개 있으면 첫 등장이 먼저옵니다
- 모든 중복 항목을 제거해야하며 각 문자열 중 하나만 최종 목록에 있어야합니다.
나는 현재
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
나는 같은 대답을 set
보았지만 내가 원하지 않는 순서를 임의로 변경합니다.
편집 : 전에 품질이 좋지 않아 죄송합니다. 나는 잠들기 직전에 이것을 채찍질했고 꽤 피곤했다. 가능한 한이 코드의 크기를 줄이려고 노력하고 있기 때문에 StackOverflow가 아닙니다. 답을 찾아 보았지만 아무것도 찾을 수 없었습니다.
답변
2 xnor Aug 20 2020 at 17:37
44 바이트
sorted({}.fromkeys(s),key=s.count,reverse=1)
온라인으로 시도하십시오!
아래에 대한 개선 사항, 키를 a가 아닌 기본 제공으로 대체 하고 비교를 교체하는 데 lambda
사용 reverse
합니다. 우리는 [::-1]
대신 최종 결과를 얻고 싶지만 안정적인 타이 브레이크를 제대로 수행하지 못합니다.
47 바이트
sorted({}.fromkeys(s),key=lambda y:-s.count(y))
온라인으로 시도하십시오!
코드의 간단한 전치 {}.fromkeys
, 정렬 전에 중복 제거 트릭을 이동합니다 . 정렬은 목록으로 변환되어 사전에서 키를 추출 list()
하므로 원본 호출 이 저장 됩니다.
쉽게 참조 할 수 있도록 원본 코드는 다음과 같습니다.
53 바이트
list({}.fromkeys(sorted(s,key=lambda y:-s.count(y))))
온라인으로 시도하십시오!