【问题标题】:'False' is removed from the list when removing other elements from list从列表中删除其他元素时从列表中删除“假”
【发布时间】:2021-03-17 09:06:18
【问题描述】:

我编写了一个函数来从具有不同数据类型的元素列表中删除所有零。但是在删除零的同时。布尔值“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”值的情况下执行此操作?

【问题讨论】:

  • 您希望将浮点值零 (0.0) 删除还是保留在列表中?

标签: python list-manipulation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以试试这个代码:

    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。

    【讨论】:

    • 最好使用isinstance()enumerate() 并从最后一个到第一个迭代并返回一些东西
    • @Olvin Roght 好电话,我添加了 return,但我对 enumerate 和 isinstance 了解不够,无法正确使用它们。我想我得研究一下!
    【解决方案3】:

    你可以试试这个:

    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]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 2014-12-19
      • 2013-11-25
      相关资源
      最近更新 更多