python 문자 정렬 질문있습니다. 문자 길이순+알파벳순 정렬하기.

조회수 97회

안녕하세요 어느 사이트에서 리스트안 문자들을 길이가 짧은것부터해서 길이가 같으면 사전순으로 출력해야한다고합니다.

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 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    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']
    
    • 아. 그러네요. 하민수 2020.7.22 23:46
  • 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를 사용해서 길이가 같은 경우 알파벳 순으로 비교해서 순서를 결정하고 길이가 다른 경우 길이의 차로 순서를 결정합니다.

    더 깔끔한 방법이 있을 것 같은데 아쉽게도 생각이 안나네요.

    감사합니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.