문장의 단어를 오름차순으로 정렬하려면 먼저 공백을 기준으로 문장을 단어 단위로 분리해야 합니다. 여기서는 설명의 편의를 위해 공백만 기준으로 분리하고 구두점은 그대로 두겠습니다. 필요하다면 replace() 메서드나 정규표현식(regex)을 활용해 구두점도 함께 제거할 수 있습니다.
정렬 방식: sort() vs sorted()
문장을 단어 리스트로 분리한 후에는 sort() 또는 sorted() 메서드를 사용해 단어들을 사전순(lexicographical order)으로 정렬할 수 있습니다. 두 가지 중 무엇을 사용할지는 원본 배열 자체를 변경할 것인지, 아니면 정렬된 새 배열을 받을 것인지에 따라 달라집니다.
1. 제자리 정렬(In-place Sorting) — sort()
원본 배열이나 리스트 자체의 순서를 직접 변경하면서 정렬하고 싶다면 sort() 메서드를 바로 호출하면 됩니다.
예제
sent = "mary has a very beautiful dog"
my_arr = sent.split(" ")
print(my_arr)
my_arr.sort()
print(my_arr)실행 결과는 다음과 같습니다 −
['mary', 'has', 'a', 'very', 'beautiful', 'dog'] ['a', 'beautiful', 'dog', 'has', 'mary', 'very']
출력에서 볼 수 있듯이 원본 배열인 my_arr 자체가 수정되었습니다.
2. 새 배열 반환 — sorted()
원본 배열은 그대로 유지한 채 정렬된 새 배열을 만들고 싶다면 sorted() 메서드를 사용하세요.
sent = "mary has a very beautiful dog"
# 공백을 기준으로 문장을 분리합니다.
my_arr = sent.split(" ")
print(my_arr)
# sorted() 메서드로 새로운 배열을 생성합니다.
new_arr = sorted(my_arr)
print(new_arr)
# 이번에는 my_arr가 제자리에서 변경되지 않고,
# 정렬된 새 인스턴스가 new_arr에 할당됩니다.
print(my_arr)출력
실행 결과는 다음과 같습니다 −
['mary', 'has', 'a', 'very', 'beautiful', 'dog'] ['a', 'beautiful', 'dog', 'has', 'mary', 'very'] ['mary', 'has', 'a', 'very', 'beautiful', 'dog']
두 번째 출력 결과를 보면 new_arr만 정렬되었고, 마지막 출력에서 확인할 수 있듯이 원본 배열 my_arr는 변하지 않고 그대로 유지됩니다. 이처럼 상황에 따라 sort()와 sorted()를 적절히 선택하면 효율적으로 문장의 단어를 오름차순으로 정렬할 수 있습니다.