파이썬 코딩문제ㅜ(짧으니까 알려주세요)

gohy의 이미지

3또는 5의 배수이면 True를 반환하는 함수를 사용하여,
ototh리스트(0~999까지 있음)에서 3 또는 5의배수만 남기려고 하고 있습니다.

[1번 방법]
for x in ototh:
if(not(mult_of3r5(x))):
ototh.remove(x)

[2번 방법]
for x in ototh:
if(not(mult_of3r5(x))):
tmp.append(x)

2번 방법으로 하면 tmp에 3 또는 5의 값들만 쌓입니다(정상적으로)

문제는 1번방법으로 하면 결과값들이 (첨부해놓은 이미지 참고) 제대로 필터링이 안된다는 겁니다.
0,3,5 ... 이런식으로 나와야 하는데, 2,8 등이 있는데 도저히 순서대로 따라가도 이해가 가질않습니다ㅜ

알려주세요ㅜㅜ

File attachments: 
첨부파일 크기
Image icon error.png43.44 KB
ifree의 이미지

루프를 돌리면서 요소들을 제거해 버리면 루프 인덱스와 맞물려 프로그램이 제대로 돌지 않습니다.
예를 들어 숫자 1을 제거했다면 2가 이전 1의 자리로 오게 되는데, 그 다음에 처리될 숫자는 2가 될지 3이 될지 보장이 없습니다.

DarkSide의 이미지

결과를 보니.
0 보존
1 제거 후 2가 당겨지고 다음은 3을 처리하여 보존(2는 프로그램 상에서 처리가 되지 않음)
4 를 제거하고 5는 처리되지 않으며 6은 보존, 7 제거 후 8은 처리되지 않고 9를 처리하여 보존.
따라서 0 2 3 5 6 8 9...이 남습니다.

gohy의 이미지

감사합니다ㅜ.ㅜ 윗분들의 말씀들어보니 이해가 가네요 감사합니다!!