리스트(List)는 Python에서 가장 널리 사용되는 데이터 컬렉션입니다. 실제 개발 과정에서 주어진 리스트가 이미 정렬되어 있는지 확인해야 하는 상황을 자주 마주하게 됩니다. 이 글에서는 Python으로 리스트의 정렬 여부를 확인할 수 있는 대표적인 두 가지 방법을 소개합니다.
방법 1: sort() 함수 활용
가장 직관적인 방법은 원본 리스트의 복사본을 만들어 정렬한 뒤, 원본과 비교하는 것입니다. 복사본에 sort() 함수를 적용하여 새로운 리스트로 저장하고, 이를 원본 리스트와 비교해 두 리스트가 동일한지 확인합니다.
예제 코드
listA = [11,23,42,51,67]
# 주어진 리스트
print("Given list : ",listA)
listA_copy = listA[:]
# 복사본에 sort 적용
listA_copy.sort()
if (listA == listA_copy):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
# 다시 확인
listB = [11,23,21,51,67]
# 주어진 리스트
print("Given list : ",listB)
listB_copy = listB[:]
# 복사본에 sort 적용
listB_copy.sort()
if (listB == listB_copy):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list : [11, 23, 42, 51, 67] Yes, List is sorted. Given list : [11, 23, 21, 51, 67] No, List is not sorted.
방법 2: all()과 range() 함수 활용
두 번째 방법은 all() 함수와 range() 함수를 함께 사용하는 것입니다. all() 함수를 통해 리스트의 모든 요소가 바로 다음 요소보다 작거나 같은지 검사하고, range() 함수로 리스트 전체를 순회하며 조건을 확인합니다. 이 방법은 불필요한 복사본 생성 없이 원본 리스트만으로 정렬 여부를 판단할 수 있어 효율적입니다.
예제 코드
listA = [11,23,42,51,67]
# 주어진 리스트
print("Given list : ",listA)
# all과 range 적용
if (all(listA[i] <= listA[i + 1] for i in range(len(listA)-1))):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")
# 다시 확인
listB = [11,23,21,51,67]
print("Given list : ",listB)
# all과 range 적용
if (all(listB[i] <= listB[i + 1] for i in range(len(listB)-1))):
print("Yes, List is sorted.")
else:
print("No, List is not sorted.")실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Given list : [11, 23, 42, 51, 67] Yes, List is sorted. Given list : [11, 23, 21, 51, 67] No, List is not sorted.
마무리
정리하면, sort()를 이용한 방법은 코드가 단순하고 이해하기 쉬운 반면 리스트 복사본을 만들어야 하므로 메모리가 추가로 필요합니다. 반면 all()과 range()>를 조합한 방법은 제너레이터 표현식을 사용해 추가 메모리 없이 한 번의 순회로 정렬 여부를 판별할 수 있습니다. 리스트의 크기와 상황에 따라 적절한 방법을 선택하여 사용하시기 바랍니다.