首页 > 解决方案 > 在 for 循环期间用布尔值就地修改列表的奇怪行为

问题描述

通过解决 python 练习,我遇到了我不理解的 for-loop 的奇怪行为。

move_zeros(array)应该将数组的所有零移动到其末尾。

def move_zeros(array):
        for x in array:
                if  x == 0 and x is not False:
                        array.remove(x)
                        array.append(x)

        return array

它适用于具有各种项目的数组,但如果数组包含 False,则结果是错误的:

move_zeros([1,2,0,1,0,1,0,3,0,1]) => [ 1, 2, 1, 1, 3, 1, 0, 0, 0, 0 ](正确的!)

move_zeros([0, 1, False, False]) => [1, False, 0, 0](不正确!)

标签: pythonlistfor-loopin-place

解决方案


def move_zeros(array):
    new_arr = []
    nulls = []
    for x in array:
      if x:
        new_arr.append(x)
      else:
        nulls.append(x)
    return new_arr + nulls  

请不要通过您迭代的内容更改对象...


推荐阅读