list 안 5개 elements 중 홀수 제거

jinatra·2021년 8월 7일
0

Python

목록 보기
4/15
post-thumbnail

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

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

example

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

#결과
[2, 4]

listelements 수가 표기되어 있을 때, 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개의 댓글