리스트에서 특정 값 'x'가 처음 나타나는 위치 이전에 있는 모든 'y' 값을 제거해야 하는 경우가 있습니다. 이럴 때 파이썬(Python)의 리스트 컴프리헨션(list comprehension)과 index 메서드를 함께 사용하면 간단하게 해결할 수 있습니다.
예제 코드
아래 예제를 통해 실제 동작 방식을 확인해 보겠습니다.
my_list = [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
print("The list is :")
print(my_list)
a, b = 8, 4
index_a = my_list.index(a)
my_result = [ele for index, ele in enumerate(my_list) if ele != b or (ele == b and index > index_a)]
print("The resultant list is ")
print(my_result)
실행 결과
The list is : [4, 45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8] The resultant list is [45, 75, 46, 66, 77, 48, 99, 10, 40, 5, 8]
코드 설명
리스트를 정의한 뒤 콘솔에 출력합니다.
두 개의 변수 a와 b에 정수 값을 할당합니다. 여기서 a(8)는 기준이 되는 값이고, b(4)는 제거 대상인 값입니다.
index()메서드를 사용해 변수 a가 리스트에서 처음 나타나는 인덱스를 구합니다.구한 인덱스를 변수 index_a에 저장합니다.
리스트 컴프리헨션과
enumerate함수를 사용해 리스트의 요소와 해당 인덱스를 함께 순회합니다.조건식을 통해 요소가 b와 같지 않거나, b와 같더라도 그 인덱스가 index_a보다 클 경우에만 결과 리스트에 포함시킵니다. 즉, a가 처음 등장하기 전의 b만 걸러지고, 그 이후의 b는 그대로 유지됩니다.
연산 결과를 변수 my_result에 할당합니다.
최종 결과를 콘솔에 출력합니다.
위 실행 결과를 보면 리스트 맨 앞에 있던 4가 제거된 것을 확인할 수 있습니다. 만약 값 8 이후에 또 다른 4가 존재했다면, 해당 요소는 조건(index > index_a)을 만족하므로 삭제되지 않고 그대로 남게 됩니다.