python 문자 정렬 질문있습니다. 문자 길이순+알파벳순 정렬하기.
조회수 2298회
안녕하세요 어느 사이트에서 리스트안 문자들을 길이가 짧은것부터해서 길이가 같으면 사전순으로 출력해야한다고합니다.
N=int(input())
N_list=['i', 'im', 'it', 'no', 'but', 'more', 'wont', 'wait', 'yours', 'cannot', 'hesitate']
N_list=list(set(N_list))
N_list.sort(key=len)
for i in N_list:
answer=''.join(i)
print(answer)
answer=''
위에 코딩처럼 짜봤는데 다른거는 별 이상이 없어보였는데
'wait'단어가 먼저와야 될것이 'wont'단어가 먼저 와버립니다.
즉 i im it no but more wait wont yours cannot hesitate가 와야 정답인것이
wont가 먼저 오고 wait 가 그 뒤에 나옵니다
어떻게하면 해결할수있을지 조언부탁드립니다.
2 답변
-
sort 를 한번하면 알파벳순으로 정렬이 됩니다.
이 상태에서 길이로 한번 더 해주면 됩니다.
N_list=['i', 'im', 'it', 'no', 'but', 'more', 'wont', 'wait', 'yours', 'cannot', 'hesitate'] N_list.sort() N_list.sort(key=lambda i:len(i)) N_list ['i', 'im', 'it', 'no', 'but', 'more', 'wait', 'wont', 'yours', 'cannot', 'hesitate']
-
def cmpFunc(x, y): if len(x)==len(y): if min(x,y)==x: return -1 else: return 1 return len(x) - len(y) N_list=['i', 'im', 'it', 'no', 'but', 'more', 'wont', 'wait', 'yours', 'cannot', 'hesitate'] N_list=list(set(N_list)) N_list.sort(cmp=cmpFunc) for i in N_list: answer=''.join(i) print(answer) answer=''
sort 인자로 cmp를 사용해서 길이가 같은 경우 알파벳 순으로 비교해서 순서를 결정하고 길이가 다른 경우 길이의 차로 순서를 결정합니다.
더 깔끔한 방법이 있을 것 같은데 아쉽게도 생각이 안나네요.
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력