Python 遍历数组时出现的问题:

不能遍历的时候同时修改他

1
2
3
4
5
6
7
8
9
10
11
12
13
#便利数组,找到并删除所有的偶数
numbers = [1,3,5,7,8,5,8,9,5,7,44,2,6,8,8]

for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)
print numbers

#输出
>>[1, 3, 5, 7, 5, 9, 5, 7, 2, 8]

本应该输出为
[1, 3, 5, 7, 5, 9, 5, 7]

因为python的特殊机制,在遍历时改版数组是会出现各种莫名的问题

因此不能在for循环遍历时对数组进行操作,而需要用到另外一种办法

一.

1
2
3
4
5
6
7
8
9
10
#建立一个新的数组,找出所有偶数,将这个偶数数组中的元素进行删除
def remove_even(numbers):
    remove = []
    for num in numbers:
        if num % 2 == 0:
            remove.append(num)           
    for i in remove:
        numbers.remove(i)  
    return numbers
#[1, 3, 5, 7, 5, 9, 5, 7] 正确结果

二.

1
2
3
4
5
6
7
8
#建立奇数数组,将所有奇数存入其中并返回
def remove_even2(numbers):
    newlist = []
    for num in numbers:
        if num % 2 == 1:
            newlist.append(num)
    return newlist
#[1, 3, 5, 7, 5, 9, 5, 7]  正确结果