본문 바로가기
Python/Python FAQ

Python 문자열 목록을 정렬하는 방법은 무엇인가요?, How to sort a list of strings?

by 베타코드 2023. 10. 27.
반응형

질문


파이썬에서 알파벳순으로 정렬된 목록을 만드는 가장 좋은 방법은 무엇인가요?


답변


기본 답변:

mylist = ["b", "C", "A"]
mylist.sort()

이는 원래의 리스트를 수정합니다(즉, 제자리에서 정렬됩니다). 원본을 변경하지 않고 정렬된 리스트의 사본을 얻으려면 sorted() 함수를 사용하세요:

for x in sorted(mylist):
    print x

그러나 위의 예제는 조금 나이브합니다. 로케일을 고려하지 않고 대소문자를 구분하여 정렬합니다. 요소마다 여러 번 평가되어야 하는 cmp를 사용하는 대신, 선택적 매개변수 key를 사용하여 사용자 정의 정렬 순서를 지정할 수 있습니다(헬퍼 함수인 cmp_to_key는 functools에서 제공됩니다).

따라서 현재 로케일에 따라 언어별 규칙을 고려하여 정렬하려면 다음과 같이 사용할 수 있습니다(사용자 정의 로케일을 지정할 수도 있습니다):

sorted(mylist, key=cmp_to_key(locale.strcoll))

마지막으로, 필요한 경우 사용자 정의 로케일을 지정할 수 있습니다:

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # 사용하는 언어/로케일에 따라 다름
assert sorted((u'Ab', u'ad', u'aa'),
  key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']

마지막으로, lower() 메서드를 사용하는 대소문자를 구분하지 않는 정렬 예제를 볼 수 있습니다. 이는 ASCII 문자 집합에 대해서만 올바르게 작동하므로, 비영어 데이터에 대해서는 잘못된 방법입니다:

# 이것은 잘못된 방법입니다!
mylist.sort(key=lambda x: x.lower())
# 더 간단한 표기법, 약간 더 빠르지만 여전히 잘못된 방법
mylist.sort(key=str.lower)
반응형

댓글