[TIL] Python - 리스트 내 요소 삭제하기 / out of range 에러

Hailee·2020년 11월 21일
0

[ TIL ]

목록 보기
9/40
post-thumbnail

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

  • 리스트의 요소들은 전부 숫자값이고 총 요소 수는 5개 입니다.
  • 예를 들어, 다음과 같은 list가👇🏻 input으로 주어졌다면:
[1, 2, 3, 4, 5]

다음과 같은 결과물👇🏻이 리턴되어야 합니다.

[2, 4]

리스트에서 홀수를 지워야 한다는 말에만 집착하다보니
for문으로 답을 출력했다.

def remove_odd_numbers(numbers):
  my_list = []
  for n in numbers:
    if n%2 == 0:
      my_list.append(n)
  return my_list

근데 생각해보니까 지금은 리스트 내 요소를 지우는 법에 대해서 배워야 하는거쟈나
아직 for문으로 간결하게 할 때가 아닌데!

del, remove 메서드를 사용해서 지워보기로 했다.

원래는 이 순서대로 👇🏻 썼었는데 에러가 났다.

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]
  print(numbers)
  return numbers

index out of range라고 했다.
왜?

알고보니 리스트의 첫번째 인덱스 요소부터 삭제 시도를 하게되면
진행할수록 무언가 하나는 삭제가 될 텐데

하나만 지워지더라도 본래의 리스트 요소 갯수와는 달라지게 되므로
막판에 계속 out of range 에러가 뜨는 것!!

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]

print(numbers)
return numbers


암튼 요로케 깔끔하게 뒤에서부터 지워오면
그 이전 순번의 요소들을 검사할 수 있게되니까
에러가 나지 않는다 ><
profile
웹 개발 🐷😎👊🏻🔥

0개의 댓글