'False' 从列表中删除其他元素时从列表中删除

'False' is removed from the list when removing other elements from list

我编写了一个函数来从具有不同数据类型的元素列表中删除所有零。但是在删除零的同时。布尔值 'False' 也被删除。但是当我将它更改为 'True' 时,它并没有被删除。我尝试了很多不同的方法来做到这一点,但结果是一样的。

def move_zeros(array):
  for i in range(array.count(0)):
      array.remove(0)
  print(array)

move_zeros([0,1,None,2,False,1,0])

输出为

[1, None, 2, 1]

如何在不删除 'False' 值的情况下执行此操作?

False和True分别等于0和1。如果你想从列表中删除 0 而不删除 False,你可以这样做:

my_list = [0,1,None,2,False,1,0]

my_list_without_zero = [x for x in my_list if x!=0 or x is False]

由于 False 是单个对象,您可以使用 is 来检查某个值是否是该特定对象。

您可以试试这个代码:

def move_zeros(array):
    for i in array:
        if (type(i) is int or type(i) is float) and i == 0:
            addr = array.index(i)
            del(array[addr])
    return array

这会遍历数组中的所有项目,然后检查它是整数还是浮点数,如果等于 0,则将其删除。 False 被删除的原因是因为 False 在存储在程序中时计算为 0。

你可以试试这个:

def move_zeros(array):
    array = [x for x in array if x is False or x!=0]
    print(array)

move_zeros([0,1,None,2,False,1,0])

或者你可以试试这个:

def move_zeros(array):
    newarray = []

    for x in array:
        if x is False or x!=0:
            newarray.append(x)

    print(newarray)

move_zeros([0,1,None,2,False,1,0])

在 运行 之后你应该得到 [1, None, 2, False, 1]