파이썬에서 배열(리스트)의 중복 요소를 출력해야 할 때는 리스트의 요소들을 하나씩 순회하면서 중첩 반복문(nested loop)을 활용할 수 있습니다.
이 방법은 각 요소를 나머지 모든 요소와 비교하여 동일한 값이 발견되면 화면에 출력하는 원리로 동작합니다. 아래 예제를 통해 자세히 살펴보겠습니다.
예제 코드
my_list = [1, 2, 5, 6, 8, 9, 3, 4, 8, 9, 1, 8]
print("리스트는 다음과 같습니다 :")
print(my_list)
print("리스트의 중복 요소는 다음과 같습니다 : ")
for i in range(0, len(my_list)):
for j in range(i + 1, len(my_list)):
if my_list[i] == my_list[j]:
print(my_list[j])
실행 결과
리스트는 다음과 같습니다 : [1, 2, 5, 6, 8, 9, 3, 4, 8, 9, 1, 8] 리스트의 중복 요소는 다음과 같습니다 : 1 8 8 9 8
코드 설명
먼저 정수 값들이 담긴 리스트를 정의하고, 콘솔에 전체 리스트를 출력합니다.
바깥쪽 반복문과 안쪽 반복문을 두 겹으로 구성하여, 현재 위치(i)의 요소와 그 이후 위치(j)의 요소들을 차례대로 비교합니다.
두 요소의 값이 일치하면, 해당 요소를 중복 요소로 판단합니다.
중복으로 판별된 요소는 즉시 콘솔에 출력됩니다.
참고: 시간 복잡도 개선하기
위 방법은 직관적이지만 시간 복잡도가 O(n²)이므로 리스트가 커질수록 실행 속도가 느려집니다. 파이썬 표준 라이브러리의 collections.Counter를 사용하면 O(n)의 시간 복잡도로 더 효율적으로 중복 요소를 찾을 수 있습니다.
from collections import Counter
my_list = [1, 2, 5, 6, 8, 9, 3, 4, 8, 9, 1, 8]
counts = Counter(my_list)
duplicates = [item for item, count in counts.items() if count > 1]
print("중복 요소 :", duplicates)
실행 결과는 다음과 같습니다.
중복 요소 : [1, 8, 9]
데이터 양이 적다면 중첩 반복문 방식도 충분하지만, 대용량 데이터를 다룰 때는 Counter를 활용한 방식을 권장합니다.