python 删除指定列表元素的问题

麻烦大家看一下下面两串代码:
1.

a = [10,20,3,10,50,1,2,5,4,8,9]

for j in a:
    if j%2 == 0:
        a.remove(j)
print(a)

2.

a = [10,20,3,10,50,1,2,5,4,8,9]
for i in range(len(a)):
    for j in a:
        if j%2 == 0:
            a.remove(j)
print(a)

第一中方法输出的结果为:[20, 3, 50, 1, 5, 8, 9]
第二种方法输出的结果为:[3, 1, 5, 9]

求解为什么, 我觉得他俩是一样的,为什么第一种方法得出的结果不对,希望大家可以解答,感谢

因为remove()之后遍历列表就会出错了
a = [10,20,3,10,50,1,2,5,4,8,9]

for j in a:
if j%2 == 0:
a.remove(j)
第一次把10 删除了,然后20就会被跳过判断,因为10删除后,20就是列表第一个元素了

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)