3

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

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, 无, 2, 1]

如何在不删除“False”值的情况下做到这一点?

4

3 回答 3

4

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来检查值是否是该特定对象。

于 2020-12-05T15:09:41.397 回答
0

你可以试试这段代码:

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。

于 2020-12-05T15:11:55.373 回答
-1

你可以试试这个:

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]

于 2020-12-05T16:18:12.897 回答