Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 리스트에서 'x' 앞에 위치한 모든 'y' 요소 제거하기

리스트에서 특정 값 '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)을 만족하므로 삭제되지 않고 그대로 남게 됩니다.