<TIL> Py - for 반복문 왜 안나올까

Sinjae Lee·2021년 6월 11일
0

numbers라는 리스트에서 홀수만 return 받고 싶다

def remove_odd_numbers(numbers):
	for i in numbers:
      	if i % 2 == 0:
        	numbers.remove(i)
    return print(numbers)

만약 numbers = [2, 7, 4, 12, 3, 9]
라고 했을 때 함수를 출력하면 위와같은 결과가 나온다
왜 이런 결과가 나왔을까

python 이 처음 for 문을 작동하고 numbers[0]인 2는 짝수이기 때문에 numbers.remove(i)에 의해서 제거된다.
사실 문제는 여기서 발생한다. 내가 생각했던 파이썬은

첫번째 for 문 - numbers = [2, 7, 4, 12, 3, 9] 에서 2 제거
두번째 for 문 - numbers = [ , 7, 4, 12, 3, 9] 에서 7 생존
세번째 for 문 - numbers = [ , 7, 4, 12, 3, 9] 에서 4 제거
...
이렇게 똑똑하게 걸러내줄줄 알았더니

첫번째 for 문 - numbers = [2, 7, 4, 12, 3, 9] 에서 2 제거 하면
numbers = [7, 4, 12, 3, 9] 이 된다. 그리고 이 numbers list 에서 for 문이 반복한다.
즉 for - if 에 의해 numbers[0] 인 2가 제거 됐고 numbers[1] 에서 if 문이 돌아야 하는데 numbers[1]이 7이 아닌 4가 된다.
즉 7이 생존한것은 나의 코드 덕분이 아닌 그냥 건너 뛴게 되어 버리는것이다.

그래서 두번째 반복에서 4를 제거하고 numbers = [7, 12, 3, 9] 에서 세번째 반복문이 돌아가게 되고 element 12 를 건너뛰고 numbers[2] 인 3이 검증받게 되어서 12가 생존하게 된다.

해결 방법

이렇게 기존 리스트에 reversed 를 주고 해당 elements로 기존 list를 검증 반복한다.

profile
Back-end developer

0개의 댓글

관련 채용 정보