파이썬 리스트 삭제 remove pop del 함수 차이점 완벽 이해하기
파이썬을 하다 보면 리스트에서 값을 지워야 할 일이 정말 많죠. 근데 리스트 삭제를 할 때 쓰는 함수 중에 remove, pop, del 이 세 가지가 있는데 각각 뭐가 다른지 헷갈리실 때가 많아요. 저도 처음엔 이 셋을 막 섞어 쓰다가 에러도 자주 나고, 의도와 다르게 값이 사라져서 당황했던 기억이 있답니다. 그래서 오늘은 파이썬 리스트 삭제 remove pop del 함수 차이점 완벽 이해하기
왜 remove, pop, del 차이점을 알아야 할까요?
이 함수들의 차이를 모르면 코딩할 때 에러가 빈번해지고, 의도하지 않은 요소 삭제로 디버깅에 시간 낭비하기 너무 쉽습니다. 특히 대량 데이터를 다룰 때 실수 방지가 중요해요. 한번 저처럼 낭패 보지 않도록 각각의 특징과 쓰임새를 제대로 익히시면 파이썬 리스트 삭제 remove pop del 함수 차이점 완벽 이해하기
remove()는 값으로 삭제, 왜 첫 번째만 지울까?
remove()는 리스트 안에서 특정한 값을 찾아서 없애는 방법이에요. 문제는 중복된 값이 있을 경우 첫 번째로 발견한 것만 삭제한다는 점입니다. 예를 들어 쇼핑 리스트에 ‘사과’가 두 개 있으면 첫 번째 ‘사과’만 지우고 나머지는 남아요.
fruits = ['사과', '바나나', '사과', '오렌지']
fruits.remove('사과')
print(fruits) # ['바나나', '사과', '오렌지']
한 가지 주의할 점! 리스트에 없는 값을 넣으면 ValueError가 나 버려요. 그래서 삭제 전에 값이 들어있는지 확인하는 습관이 필요합니다.
| 특징 | 예시 |
|---|---|
| 값으로 삭제 첫 번째 매칭만 삭제 ValueError 발생 가능 |
[‘A’, ‘B’, ‘A’].remove(‘A’) → [‘B’, ‘A’] |
pop()은 인덱스로 삭제하며 값도 돌려줘요, 이게 왜 편할까요?
반면 pop()은 인덱스 번호를 넣어 해당 위치를 삭제하는데, 삭제한 값을 그대로 반환해줍니다. 인덱스를 안 넣으면 기본으로 리스트 마지막 요소를 삭제해요. 스택 자료구조에서 데이터를 꺼낼 때 써서 편리하죠.
numbers = [10, 20, 30, 40] last = numbers.pop() # 40 반환하며 삭제 print(last) # 40 print(numbers) # [10, 20, 30] mid = numbers.pop(1) # 인덱스 1 삭제, 20 반환 print(mid) # 20 print(numbers) # [10, 30]
잘못된 인덱스 입력 시엔 IndexError가 나오니 범위 확인이 필요합니다.
del 키워드는 어떻게 다를까요?
del은 함수가 아니라 파이썬 키워드인데요, 인덱스나 슬라이싱 범위를 지정해 통째로 없앨 때 씁니다. 값 반환은 없고, 그냥 지우기만해요. 여러 개 동시에 지울 수 있어 대용량 처리 때 특히 유리하고, 약간 pop보다 빠르다는 평가도 있고요.
colors = ['빨강', '주황', '노랑', '초록', '파랑'] del colors[1] # 주황 삭제 print(colors) # ['빨강', '노랑', '초록', '파랑'] del colors[1:3] # 노랑, 초록 삭제 print(colors) # ['빨강', '파랑'] del colors[:] # 리스트 전체 삭제 print(colors) # []
여기서 하나 조심할 점! del colors로 하면 리스트 변수 자체가 사라집니다. 내용만 비우시려면 del colors[:]를 써 주세요.
파이썬 리스트 삭제 remove pop del 함수, 뭐가 제일 빠르고 언제 써야 할까요?
작업 효율과 성능을 고려하면 이렇습니다.
| 함수 | 입력값 | 반환값 | 특징 | 에러 |
|---|---|---|---|---|
| remove() | 값 | 없음 | 첫 매칭 삭제, 중복 시 첫 번째만 | ValueError |
| pop() | 인덱스 (기본 끝) | 삭제된 값 | 값 반환, 스택 자료구조에 적합 | IndexError |
| del | 인덱스 또는 슬라이스 | 없음 | 범위 삭제 가능, 속도 빠름 | IndexError |
| clear() | 없음 | 없음 | 전체 초기화, 리스트 객체 유지 | 없음 |
핵심은, ‘remove’는 값으로 삭제, ‘pop’과 ‘del’은 인덱스 중심으로 작동한다는 점이니 상황별로 적절히 골라 쓰시면 됩니다.
경험담: 대량 데이터 중복값 모두 지우고 싶다면?
저는 한 번 특정 값이 여러 개일 때 remove를 반복해서 쓰려 했는데 무척 번거로웠어요. 그때 리스트 컴프리헨션을 이용해 보니 훨씬 깔끔해지고 깜짝 놀랐습니다.
data = [1, 2, 2, 3, 2] new_data = [x for x in data if x != 2] print(new_data) # [1, 3]
이 방법은 원하는 값을 한꺼번에 깔끔히 제거할 때 딱 좋아요. 성능 걱정된다면 직접 timeit으로 비교해보는 것도 추천드립니다.
자주 묻는 질문
remove와 pop 차이는 뭐예요?
remove는 값, pop은 인덱스로 삭제하고 반환해요.
del로 리스트 전체 지우는 법은?
del 리스트[:] 하면 내용만 싹 사라져요.
pop에 인덱스 안 넣으면 어떻게 되나요?
마지막 요소 삭제 후 값을 돌려줘요.
이제 파이썬 리스트 삭제 remove pop del 함수 차이점 완벽 이해하기