본문 바로가기

Language/Python

[Python] 리스트 요소 삭제하기 - del, pop(), remove(), clear()

list_a = [1, 2, 3, 4, 5]

 

1부터 5까지 숫자를 저장하고 있는 리스트를 만들었어요.

그런데 숫자 3이 필요가 없어졌어요.

그럼 리스트 안에서 숫자 3을 없애야 되는데 어떻게 할까요?

 

파이썬은 요소를 제거하기 위해 다양한 방법을 제공해줘요.

인덱스를 이용해서 삭제하는 방법(del, pop), 값을 이용해서 삭제하는 방법(remove),

그리고 전체 데이터를 삭제하는 방법(clear)을 제공하고 있죠.

그럼 소스코드를 통해 하나씩 알아볼까요?

아! 데이터 삭제 방법을 설명할 때 위에 있는 list_a를 사용할 거에요.

 

인덱스를 이용해서 데이터 삭제하기 1 - del

 

가장 먼저 del이라는 키워드를 이용해서 데이터를 삭제해 볼게요.

먼저 숫자 3이 저장되어 있는 인덱스 번호는 몇 번이죠?

맞아요 2번 인덱스에 저장되어 있죠. 이 인덱스 번호를 알아야 del을 사용할 수 있는데요.

그럼 숫자 3을 삭제해볼께요.

 

# 데이터를 삭제하기 전 list_a
print(list_a)
>> (출력) [1, 2, 3, 4, 5]

# del을 이용해서 숫자 3 지우기 : index 2에 데이터를 지워주세요.
del list_a[2]

# 데이터를 삭제한 후 list_a
print(list_a)
>> (출력) [1, 2, 4, 5]

 

del이라는 키워드를 이용해서 데이터를 삭제해봤어요.

쉽죠? del은 delete(삭제)를 의미하는 키워드에요.

그런데 del을 이용해서 데이터가 삭제될 범위를 지정해줄 수도 있어요.

 

# 데이터를 삭제하기 전 list_a
print(list_a)
>> (출력) [1, 2, 3, 4, 5]

# 숫자 3부터 맨 뒤에 있는 데이터까지 삭제하기
del list_a[2:]
print(list_a)
>> (출력) [1, 2]

# 데이터가 1 ~ 5까지 모두 들어있다고 생각하고!
# 숫자 2부터 4까지 삭제하기
del list_a[1:4]
print(list_a)
>> (출력) [1, 5]

 

이렇게 list의 슬라이싱을 이용해서 데이터를 삭제할 범위를 지정할 수 있어요.

그런데 만약 여러분들이 인덱스 값을 잘못 전달해주면 어떻게 될까요?

list_a의 인덱스는 0부터 4까지 있죠.

그런데 5번 인덱스의 값을 삭제해달라고 하면?

 

del list_a[5]
>> (출력) IndexError: list assignment index out of range

 

리스트의 인덱스 범위를 넘게 되면 IndexError를 발생해줘요.

혹시나 이런 에러를 만났다면 index 값이 잘못 전달되어 있는지 확인하면 되요.

아! 물론 아래 pop 함수도 마찬가지!

에러 정보를 꼭 기억해줘요!

 

인덱스를 이용해서 데이터 삭제하기 2 - pop

 

이번에는 pop 함수를 이용해서 데이터를 삭제해볼게요.

먼저 del과 pop()의 차이점은 무엇일까요?

del은 말그대로 데이터를 삭제하는 기능을 해요.

하지만 pop()은 데이터를 꺼낸다라고 보는게 맞을 것 같아요.

바로 소스코드를 작성해보면서 알아볼게요.

 

print(list_a.pop())
>> (출력) 5
print(list_a)
>> (출력) [1, 2, 3, 4]

print(list_a.pop(1))
>> (출력) 2
print(list_a)
>> (출력) [1, 3, 4]

 

그냥 pop()을 하게되면 맨 뒤에 있는 요소를 반환해줘요.

그래서 맨 뒤에 있던 숫자 5를 출력하는 것을 볼 수 있어요.

그리고 요소를 꺼내는 동시에 리스트에서 요소를 삭제해주네요.

 

그럼 맨 뒤에 있는 값만 꺼낼까요?

맨 처음에 인덱스를 이용해서 데이터를 삭제하는 방법 중 pop 함수가 있다고 했죠?

그래서 list_a에서 인덱스 1번에 저장된 값을 꺼내기 위해 pop(1)이라고 작성해 줬어요.

결과는! 인덱스 1번에 저장된 2를 꺼내주네요!

 

리스트에서 데이터를 사용한 후에 제거해주고 싶을 때 pop() 함수를 이용하면 좋겠죠?

 

값을 이용해서 데이터 삭제하기 - remove

 

remove 함수삭제할 데이터를 전달해주면 리스트에서 값을 찾아 삭제해주는 역할을 해요.

대신 첫 번째로 만난 데이터를 삭제해줘요.

바로 소스코드를 볼까요?

 

list_b = [1, 2, 3, 2, 4, 5]

# 숫자 2를 찾아 삭제하기
list_b.remove(2)
print(list_b)
>> (출력) [1, 3, 2, 4, 5]

 

보셨나요? remove 함수를 이용해 숫자 2를 삭제해달라고 전달했어요.

그런데 list_b에는 2가 두 개나 있었죠.

하지만 삭제된 가장 앞 쪽에 있는 숫자 2를 삭제하는 것을 볼 수 있어요.

 

그런데 한 가지 조심할 것!

만약 리스트에 없는 값을 삭제하면?

 

list_b.remove(6)
>> (출력) ValueError: list.remove(x): x not in list

 

리스트에 삭제할 값이 없다고 ValueError를 출력하네요.

이 에러를 만나면 리스트에 값이 있는지 확인해주세요!

 

전체 데이터 삭제하기 - clear

 

이번에는 리스트에 있는 모든 값을 삭제해주고 싶어요.

그럼 어떻게 해야할까요?

반복문을 이용해서 값을 하나씩 삭제하면 될까요?

파이썬에서는 리스트의 값을 한번에 삭제할 수 있도록 clear() 함수를 제공해줘요.

 

# 삭제 전 리스트
print(list_a)
>> (출력) [1, 2, 3, 4, 5]

list_a.clear()
print(list_a)
>> (출력) []

 

값이 모두 삭제되었어요.

쉽죠? clear 함수는 추가적으로 설명해줄게 없네요.

너무 쉽게 데이터를 다 삭제해주기 때문에요…

단! 데이터가 한번에 삭제되니까 상황에 맞게 잘 사용해야겠죠?