본문 바로가기

Python

(python) remove list elements in for loop # for 문에서 list의 요소 제거

728x90
반응형

list에서 element를 제거할 때는

특정 index의 element를 제거하거나

특정 value의 element를 제거할 수 있습니다.

 

*  index 기준 

  1) del

    list에서 삭제만 하는게 필요한 경우는 del을 이용하면 됩니다.

fruits = ['apple', 'banana', 'peach']
del fruits[1]
print(fruits)
['apple', 'peach']

 

fruits = ['apple', 'banana', 'peach']
del fruits[1:3]
print(fruits)
['apple']

 

  

  2) list에서 삭제하고, 삭제한 값을 뽑아서 사용하려는 경우는 pop을 이용

fruits = ['apple', 'banana', 'peach']
p = fruits.pop(1)
print(fruits)
print(p)
['apple', 'peach']
banana

 

 

  3) list comprehension

fruits = ['apple', 'banana', 'peach']
fruits = [element for index, element in enumerate(fruits) if index not in [1]]
print(fruits)
['apple', 'peach']

 

 

 

* value 기준

  1) if문 활용해서 새로운 list 짜기

fruits = ['apple', 'banana', 'peach']

new_fruits = []

for i in fruits:
    if i != 'banana':
        new_fruits.append(i)
        
print(new_fruits)

 

  2) list를 copy해서 카피한 list를 for문을 돌면서 value 삭제

    우선 list를 그냥 for 돌리면서 element를 제거해주면 될거 같은데 왜  copy해서 돌아야 될까요?

    remove를 실행해주는 list는 기존 list가 유지되지 않고 remove가 적용된 결과로 변하기 때문입니다.

numbers = [1,2,3,4,5,6,7,8,9,10]
new_numbers = numbers.remove(1)
print(new_numbers)
print(numbers)
None
[2, 3, 4, 5, 6, 7, 8, 9, 10]

new_numbers 가 None이 나오고

numbers가 1이 제거된 결과가 나옴을 확인 가능합니다.

이런 특징을 염두에 두고 아래와 같이 for문 안에서 remove를 적용해 봅시다

numbers = [1,2,3,4,5,6,7,8,9,10]

for i in numbers:
    if i < 5:
        numbers.remove(i)
        
print(numbers)
[2, 4, 5, 6, 7, 8, 9, 10]

원하는 결과값은 [6,7,8,9,10] 이었겠지만 그렇게 나오지 않습니다.

첫번째 for문을 돌면서 0번째 index에 위치한 1을 지우고 나면 numbers의 index 0번째 element가 2로 바뀝니다

두번째 for문을 돌면서 1번째 index에 위치한 값은 3이 되고 3을 지우고 나면 numbers의 index 1번째 element가 4로 바뀝니다.

이와 같은식으로 index-value 가 바뀌게 되면서 우리의 의도대로 list에서 element가 제거 되지 않게 됩니다.

이때문에 list를 copy해서 for문 안에서 remove를 해야 합니다.

 

numbers = [1,2,3,4,5,6,7,8,9,10]

for i in numbers.copy():
    if i < 5:
        numbers.remove(i)
        
print(numbers)
[5, 6, 7, 8, 9, 10]

 

copy() 대신에 [:]을 사용할 수도 있습니다.

numbers = [1,2,3,4,5,6,7,8,9,10]

for i in numbers[:]:
    if i < 5:
        numbers.remove(i)
        
print(numbers)
[5, 6, 7, 8, 9, 10]

 

3) list comprehension

numbers = [1,2,3,4,5,6,7,8,9,10]
numbers = [number for number in numbers if number > 4]
print(numbers)
[5, 6, 7, 8, 9, 10]
728x90
반응형