문자열 리스트에서 중복된 요소를 표시해야 하는 경우, 리스트 컴프리헨션(list comprehension)과 count 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.
이 기법은 각 요소가 리스트에서 몇 번 등장하는지 확인한 뒤, 중복되는 요소에는 등장 순번을 붙여 구분할 수 있도록 만들어 줍니다.
예제 코드
다음은 실제 동작을 보여주는 예제입니다.
my_list = ["python", "is", "fun", "python", "is", "fun", "python", "fun"]
print("원본 리스트 :")
print(my_list)
my_result = [value + str(my_list[:index].count(value) + 1) if my_list.count(value) > 1 else value for index, value in enumerate(my_list)]
print("결과 리스트 :")
print(my_result)실행 결과
원본 리스트 : ['python', 'is', 'fun', 'python', 'is', 'fun', 'python', 'fun'] 결과 리스트 : ['python1', 'is1', 'fun1', 'python2', 'is2', 'fun2', 'python3', 'fun3']
코드 설명
먼저 문자열 리스트를 정의한 후 콘솔에 출력합니다.
리스트 컴프리헨션이
enumerate()와 함께 사용되어 각 요소를 인덱스와 함께 순회하면서 해당 값의 등장 횟수를 확인합니다.특정 값이 리스트 전체에서 1번보다 많이 등장한다면, 현재 인덱스 이전 구간(
my_list[:index])에서의 등장 횟수에 1을 더해 요소 뒤에 순번을 붙입니다.중복되지 않는 요소는 원래 값 그대로 유지됩니다.
최종 결과는 변수
my_result에 저장됩니다.저장된 결과가 콘솔에 출력됩니다.
핵심 포인트
enumerate(my_list)는 각 요소에 인덱스를 부여하여 순회할 수 있게 해주며, my_list[:index].count(value)는 현재 위치보다 앞쪽에서 같은 값이 몇 번 나왔는지 계산합니다. 여기에 1을 더하면 해당 중복 요소가 몇 번째 등장인지 알 수 있어, 'python1', 'python2', 'python3'처럼 순차적인 번호가 자동으로 붙게 됩니다.