python list.sort() 관련 질문입니다.

조회수 638회
Group3 = list()
Group3.append('가')
Group3.append('다')
Group3.append('라')
Group3.append('나')
Group3.append('c')
Group3.append('a')
Group3.append('b')
Group3.append('羅')
Group3.append('家')
Group3.append('多')
Group3.append('A')
Group3.append('F')
Group3.append('B')
Group3.sort()
print("Group3 문자열에 한글과 영어, 한자를 슬라이싱하여 분할하면 정렬이 될까? >")
Slice1 = Group3[:3]
Slice2 = Group3[4:6]
Slice3 = Group3[7:9]
Slice4 = Group3[10:12]
Slice1.sort()
Slice2.sort()
Slice3.sort()
Slice4.sort()
print(Group3)

기대값 : ['A', 'B', 'F', 'a', 'b', 'c', '家', '羅', '多', '가', '나', '다', '라']

결과값 : ['A', 'B', 'F', 'a', 'b', 'c', '多', '家', '가', '나', '다', '라', '羅']

  1. 위와같이 기대값과 결과값이 다르게 출력되었습니다.
  2. python에서 한자는 sort()되지 않는 것인가요?
  3. 아니라면 한자는 따로 어떠한 방법을 사용해야 하나요?
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 문자캐릭터 하나에 ord 함수를 취하면, 그 문자의 unicode code point 인 숫자가 반환됩니다. 이 수를 기준으로 정렬할 겁니다.

    >>> l = ['A', 'B', 'F', 'a', 'b', 'c', '多', '家', '가', '나', '다', '라', '羅']
    >>> list(map(ord, l))
    [65, 66, 70, 97, 98, 99, 22810, 23478, 44032, 45208, 45796, 46972, 63759]
    >>> 
    

    한자는 우리가 생각하는 한국어의 한자뿐 아니라, 한중일베트남에서 공통으로 사용하는 한자도 있고 복잡하게 유니코드에 정의되어 있을 겁니다.

    한자의 한글독음 순으로 정렬하려고 한다면, (마지막 "라"자는 "라"로도 "나"로도 읽을 수 있으니까 좀 애매한데.... 어쨌든), 파이썬에 hanja 라는 패키지가 있으니 그걸 이용해서 한글로 변환한 값으로 소팅하면 대충 원하는 게 될 듯 합니다.

    https://github.com/suminb/hanja

    • 정말 감사합니다. 파이썬에 hanja라는 패키지가 있는 것은 처음 알았네요. 큰 도움이 되었습니다! 알 수 없는 사용자 2019.11.10 02:02

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

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)