list 안 5개 elements 중 홀수 제거

jinatra·2021년 8월 7일

Python

목록 보기
4/15
post-thumbnail

Q. Input으로 주어진 리스트에서 홀수는 전부 지우고 짝수만 남은 리스트를 리턴해주세요.

리스트의 요소들은 전부 숫자값이고 총 요소 수는 5개 입니다.

example

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

#결과
[2, 4]

list 내 elements 수가 표기되어 있을 때, if문만을 이용하여 풀어보는 방식이다.

일단 elements 들을 지우는 .remove()와 del 의 차이를 이해하여야 하고, 이를 적절하게 이용할 줄 알아야 풀 수 있는 문제였다.

처음 접했을 땐 .remove()가 더 친숙하였기에 이를 이용하여 간단히 아래와 같이 짜면 될 줄 알았다.

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

def remove_odd_numbers(numbers):

    if numbers[0] % 2 != 0:
      return numbers.remove()
    if numbers[1] % 2 != 0:
        return numbers.remove()
    if numbers[2] % 2 != 0:
      return numbers.remove()
    if numbers[3] % 2 != 0:
      return numbers.remove()
    if numbers[4] % 2 != 0:
      return numbers.remove()
    return numbers

print(remove_odd_numbers(example))


# Output

TypeError: list.remove() takes exactly one argument (0 given)

TypeError가 뜨길래 한참 고민하다가, 나의 허접한 코딩 실력에 눈물을 흘리지 않을 수 없었다.

내가 조건문을 시작하기 전에 parameter를 지정 안했으니, .remove() method를 사용했을 때 뭐를 지워야 하는지 프로그램은 이해를 하지 못했을 것이다.
(return을 하라는데 뭘 return 하라는지 지정을 안해줬으니..)

그러가 del 키워드가 생각이 났다.
return 키워드를 삭제하고 del 키워드로 다시 짜보면,

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

def remove_odd_numbers(numbers):
    if numbers[0] % 2 != 0:
      del numbers[0]
    if numbers[1] % 2 != 0:
      del numbers[1]
    if numbers[2] % 2 != 0:
      del numbers[2]
    if numbers[3] % 2 != 0:
      del numbers[3]
    if numbers[4] % 2 != 0:
      del numbers[4]
    return numbers

print(remove_odd_numbers(example))


# Output
IndexError: list index out of range

엥 이번엔 IndexError가 떴다.
list가 범위에서 벗어났단다.

찾아보니 del 키워드를 사용해서 element가 지워지면, 파이썬은 list의 index 들을 자동으로 정렬시켜 준다고 한다.

즉 del을 사용해서 element가 지워지면 뒤에서 한칸씩 땡겨진다는 개념이다.

그럼 이거를 한번 거꾸로 해보면.. logic이 반대로 되어서 내가 만든게 통하지 않을까? 싶었다.

어차피 elemtns 개수는 정해져있으니 말이다.

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

def remove_odd_numbers(numbers):
    if numbers[4] % 2 != 0:
      del numbers[4]
    if numbers[3] % 2 != 0:
      del numbers[3]
    if numbers[2] % 2 != 0:
      del numbers[2]
    if numbers[1] % 2 != 0:
      del numbers[1]
    if numbers[0] % 2 != 0:
      del numbers[0]
    return numbers

print(remove_odd_numbers(example))


# Output: 
[2, 4]

"깨달아버렸다 ㅋㅋ"
                                                                                  - 나 -

혹시나 해서 다른 숫자로 바꿔봤는데도 잘 됐다.




Take Away

del 키워드의 이해

이번 고군분투를 통해서 확실히 list 내 elements 들을 편집할 때 del 키워드를 어떻게 사용해야 하는지 이해한 것 같다.

나중에 시간을 내서 이번에 못했던, .remove() method를 이용한 방법도 한번 시도해봐야 겠다..

profile
으악

0개의 댓글