리스트에 동일한 단어가 여러 번 반복될 때, 그중에서 특정 순서(n번째)에 해당하는 단어만 골라서 제거해야 하는 경우가 있습니다. 이럴 때는 리스트를 처음부터 끝까지 순회하면서 카운터를 1씩 증가시키고, 카운트 값이 원하는 발생 횟수와 일치하는 시점에 해당 요소를 삭제하는 메서드를 정의하면 됩니다.
아래는 이를 구현한 예제입니다.
예제 코드
def remove_word(my_list, my_word, N):
count = 0
for i in range(0, len(my_list)):
if (my_list[i] == my_word):
count = count + 1
if(count == N):
del(my_list[i])
return True
return False
my_list = ['Harry', 'Jane', 'Will', 'Rob', 'Harry']
print("The list is :")
print(my_list)
my_word = 'Harry'
N = 2
flag_val = remove_word(my_list, my_word, N)
if (flag_val == True):
print("The updated list is: ", my_list)
else:
print("Item hasn't been updated")실행 결과
The list is : ['Harry', 'Jane', 'Will', 'Rob', 'Harry'] The updated list is: ['Harry', 'Jane', 'Will', 'Rob']
코드 설명
'remove_word'라는 이름의 메서드를 정의하고, 리스트·찾을 단어·발생 횟수(n) 세 가지를 매개변수로 받습니다.
'count' 변수를 0으로 초기화합니다.
for 반복문으로 리스트를 순회하며 각 요소가 지정한 단어와 일치하는지 확인합니다.
일치할 때마다 count 변수를 1씩 증가시킵니다.
count 값이 'n'과 같아지면 해당 위치의 요소를 리스트에서 삭제합니다.
요소 삭제는 파이썬의 'del' 키워드를 사용해 수행됩니다.
문자열로 이루어진 리스트를 정의한 뒤 콘솔에 출력합니다.
필요한 인자를 전달하여 메서드를 호출합니다.
처리 결과를 콘솔에 출력합니다.
동작 방식 정리
위 예제에서는 'Harry'가 두 번 등장하므로 N=2를 전달하면 두 번째 'Harry'만 제거되고 첫 번째 'Harry'는 그대로 유지됩니다. 만약 찾으려는 단어가 n번 이상 나타나지 않으면 메서드는 False를 반환하고, 호출부에서는 "Item hasn't been updated" 메시지를 출력하게 됩니다.
참고: 다른 접근 방식
인덱스를 직접 다루는 대신, list.index()와 슬라이싱을 조합하거나 리스트 컴프리헨션을 활용해 새로운 리스트를 생성하는 방법도 있습니다. 다만 원본 리스트를 그대로 수정해야 하는 상황이라면 위 예제처럼 'del' 키워드를 사용하는 방식이 가장 직관적입니다.