HOWTO · Python
Python의 목록에서 여러 요소 제거
if...else 제어문, 목록 이해, 목록 슬라이싱 및 for 루프를 사용하여 Python의 목록에서 여러 요소를 제거할 수 있습니다.
이 페이지의 내용
Python 목록에서 여러 항목을 제거하려면 먼저 선택 기준이 각 항목의 값인지 위치인지 정하세요. 값으로 필터링하면서 원본 목록을 유지하려면 리스트 컴프리헨션을 사용하면 좋고, 범위나 알고 있는 인덱스의 항목을 제거하면서 목록 자체를 바꾸려면 del을 사용할 수 있습니다. 보존된 예제 코드와 출력 블록의 레이블은 영어 그대로 표시됩니다.
값으로 제거할지 인덱스로 제거할지 선택하기
짝수만 남기는 것처럼 항목 자체가 무엇을 남길지 결정한다면 조건을 사용하세요. 목록에 어떤 값이 있는지와 관계없이 삭제할 위치를 알고 있다면 인덱스를 사용하세요. 리스트 컴프리헨션은 새 목록을 만들어 원본을 그대로 둡니다. del은 기존 목록을 직접 수정하므로 다른 코드가 그 목록을 참조하고 있을 때 이 차이가 중요합니다.
조건에 맞는 값 제거하기
이 예제는 짝수 값을 새 목록에 담습니다. if 뒤의 조건식을 바꾸면 특정 문자열 제외하기나 기준값보다 큰 값만 남기기처럼 다른 규칙에도 적용할 수 있습니다.
예제는 다음과 같습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
numbers = [2, 3, 4, 5, 6, 7, 8]
evens = [number for number in numbers if number % 2 == 0]
print("Original:", numbers)
print("Filtered:", evens)
원본 목록은 수정되지 않습니다. 같은 목록을 순회하면서 remove()를 호출하지 마세요. 항목을 삭제하면 나머지 항목의 위치가 바뀌어, 조건에 연속해서 맞는 항목이 건너뛰어질 수 있습니다. 목록을 제자리에서 수정해야 한다면 for value in numbers.copy():처럼 복사본을 순회하면서 numbers에서 조건에 맞는 값을 제거하세요. 필터링만 필요하다면 리스트 컴프리헨션이 더 간결하고 이런 수정 중 발생하는 문제도 피할 수 있습니다.
del과 슬라이싱으로 연속된 범위 삭제하기
목록 인덱스는 0부터 시작합니다. 슬라이스 start:stop에서는 start가 포함되고 stop은 포함되지 않으므로, del items[2:5]는 인덱스 2, 3, 4의 항목을 삭제합니다. 이 작업은 목록 자체를 변경합니다. 같은 반열린 구간 규칙을 적용하면 인접한 범위도 쉽게 파악할 수 있습니다. 끝 위치의 항목은 그대로 남습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = ["a", "b", "c", "d", "e", "f"]
del items[2:5]
print(items)
슬라이스의 시작이나 끝을 생략하면 목록의 처음이나 끝이 사용됩니다. 예를 들어 del items[:2]는 처음 두 항목을 제거하고, del items[3:]는 인덱스 3부터 끝까지 모두 제거합니다. 이런 방식은 연속된 범위를 삭제할 때 유용하며, 떨어져 있는 여러 위치를 선택하는 데는 사용할 수 없습니다.
선택한 인덱스를 안전하게 삭제하기
삭제할 위치가 서로 떨어져 있다면 인덱스를 큰 값부터 작은 값 순서로 삭제하세요. 큰 인덱스를 먼저 제거하면 더 낮은 위치는 바뀌지 않습니다. 작은 값부터 처리하면 삭제할 때마다 뒤쪽 항목이 앞으로 이동해 이후 인덱스가 가리키는 항목이 달라집니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
items = ["a", "b", "c", "d", "e", "f"]
indexes_to_remove = [0, 2, 5]
for index in sorted(indexes_to_remove, reverse=True):
del items[index]
print(items)
삭제 전에 목록에 유효한 인덱스가 있는지 확인하고, 선택한 인덱스에 중복이 없도록 하세요. 이 방법은 items를 직접 수정하므로 원본 값을 보존해야 한다면 먼저 복사본을 만드세요. 위치가 아니라 조건에 따라 값을 고르는 경우에는 필터링을 사용하세요.
목록에 맞는 방법 선택하기
값으로 필터링해 별도의 결과를 만들려면 리스트 컴프리헨션을 선택하세요. 연속된 범위를 제거해 목록 자체를 수정하려면 del items[start:stop]을 사용하세요. 서로 떨어진 위치를 알고 있다면 인덱스를 내림차순으로 정렬한 뒤 하나씩 삭제하세요. 각 방법은 선택 기준을 분명히 해 원치 않는 항목을 실수로 바꾸는 일을 줄여 줍니다.