파이썬 for 문 리스트 삭제 - paisseon for mun liseuteu sagje

Hey Tech

SW 개발/Python

[파이썬] 리스트 내 1개 이상의 특정 값 삭제하는 방법!

Tony Park 2021. 4. 17. 10:52

안녕하세요, 오늘은 파이썬에서 리스트 내 1개 이상의 특정 원소를 찾아 삭제하는 방법에 대해 공유해 드립니다.

삭제할 원소가 1개냐 2개 이상이냐에 따라 코드 작성 방법이 다르므로 각각 나누어 설명드리도록 하겠습니다.

원소 1개 삭제 방법

1개의 원소를 삭제하는 방법은 간단히 remove() 함수를 사용하면 됩니다.

# 기본 리스트
arr = [5, 7, 1, 1, 2, 6, 1, 6, 7]
print(arr) # [5, 7, 1, 1, 2, 6, 1, 6, 7]

# 원소 1을 1개 삭제
arr.remove(1)
print(arr) # [5, 7, 1, 2, 6, 1, 6, 7]

위와 같이 리스트에서 1에 해당하는 원소 1개만이 삭제된 것을 확인할 수 있습니다.

2개 이상의 원소 모두 삭제 방법

다음으로 2개 이상의 원소를 모두 삭제하는 방법입니다.

# 기본 리스트
arr = [5, 7, 1, 1, 2, 6, 1, 6, 7]
print(arr) # [5, 7, 1, 1, 2, 6, 1, 6, 7]

# 삭제할 원소 집합 생성
rm_set = {1, 6}
# 리스트 컴프리헨션 활용: 삭제할 원소 집합 데이터와 일일이 비교
arr_new = [i for i in arr if i not in rm_set]
print(arr_new) # [5, 7, 2, 7]

위 소스코드와 같이 삭제할 원소들을 하나의 집합 데이터 타입에 저장하였습니다. 그리고 리스트 컴프리헨션(list comprehension)을 활용해 반복문과 조건문을 만족하는 새로운 리스트를 생성하였습니다. 결과적으로 삭제하려 했던 원소 1과 6은 리스트에서 모두 제거된 것을 확인하실 수 있습니다.


포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.

그럼 오늘도 행복한 하루 보내시길 바랍니다 :D

고맙습니다!

Last Updated @20210105

- 닉네임 '실수' 님께서 예제 코드 내 오타를 피드백해 주셔서 수정하였습니다. 감사합니다👍

리스트 원본 자체를 loop에서 remove 정상적으로 반영되지 않기 때문에, 스텝 슬라이싱을 이용하면 된다.

# lst 원본 자체를 for문


lst = [ i for i in range(10) ]

for i in lst:
    lst.remove(i)

lst



[1, 3, 5, 7, 9]          # 원하는 결과가 나오지 않았다.
스텝 슬라이싱으로 for문



lst = [ i for i in range(10) ]

for i in lst[::]:
    lst.remove(i)

lst


[]

docs.python.org/3/tutorial/controlflow.html#for-statements



파이썬 for 문 리스트 삭제 - paisseon for mun liseuteu sagje

remove() 메서드 사용하기¶

파이썬 리스트에서 특정 값을 갖는 요소를 삭제하는 가장 간단한 방법은 remove() 메서드를 이용하는 것입니다.

예제1¶

lst = [4, 3, 2, 1]
lst.remove(3)
print(lst)

list.remove(value)의 형태로 값을 입력해주면 리스트에서 값을 갖는 요소를 삭제합니다.

똑같은 값이 두 개 있다면 첫번째 요소만 삭제합니다. 그리고 한 번에 하나의 값만 입력할 수 있습니다.

예제2¶

lst = [4, 3, 2, 3, 1]
for item in lst:
    if item == 3:
        lst.remove(3)

print(lst)

똑같은 값이 여러 개 있을 때에는 위와 같이 반복문을 사용해서 삭제할 수 있습니다.

리스트 컴프리헨션 이용하기¶

예제¶

lst = [4, 3, 2, 3, 1]
lst = [item for item in lst if item != 3 and item != 1]
print(lst)

리스트 컴프리헨션과 조건식을 이용해서 1과 3에 해당하는 요소를 모두 삭제했습니다.

NumPy delete() 사용하기 - by Index¶

NumPy 어레이에 대해 np.delete()를 사용하면 인덱스를 이용해서 특정 요소를 삭제할 수 있습니다.

예제¶

import numpy as np

arr = np.array([4, 3, 2, 1])
new_arr = np.delete(arr, [1, 3])

print(new1)

np.delete(arr, [indices])의 형태로 삭제할 요소의 인덱스들을 리스트의 형태로 입력합니다.

어레이에서 두번째, 네번째 요소가 삭제되었습니다.

NumPy delete() 사용하기 - by Value¶

예제¶

import numpy as np

arr = np.array([4, 3, 2, 3, 1])
new_arr = np.delete(arr, np.where((arr == 3) | (arr == 1)))

print(new_arr)

np.where((arr == 3) | (arr == 1))는 어레이 arr의 요소가 3 또는 1인 요소의 인덱스들입니다.

new_arr는 3과 1에 해당하는 요소가 모두 삭제된 어레이입니다.


이전글/다음글