【问题标题】:How to move a boolean value from one array to another in python如何在python中将布尔值从一个数组移动到另一个数组
【发布时间】:2017-07-02 14:47:55
【问题描述】:

我最近正在解决一个编码问题。它要求我将一个数组中的所有 0 移动到数组的末尾。像 [0, 1, 1, 0, 0, 1]->[1, 1, 1, 0, 0, 0]。

实际情况是原始数组中可能存在任何类型的数据,例如, [0, "A", 1 , 无, 假, 真, 0, 0, 20, 1, 0.0]

我正在做的是循环数组,比较是否为0,如果是,则将其放入另一个数组中。如果不是,则增加计数器,最后放入与计数器相同数量的 0。但是,它将布尔值 False 视为 0,所以我不能这样做,我只是好奇是否有一种方法可以将 False 与 0 分开,并在 Python 中作为 False 放入另一个数组中。 谢谢。

【问题讨论】:

  • 这是一个要求算法设计的作业,还是您可以只使用按转速排序的作业?
  • False 实现为0,但具有其他类型。所以,检查值和类型!
  • @KlausD。试试这个:isinstance(True, int)
  • @cᴏʟᴅsᴘᴇᴇᴅ 那是因为isinstance() 也会检查超类型。请改用type(False) == int
  • @KlausD。我同意,我的意思是仅仅检查类型是不够的......

标签: python arrays boolean


【解决方案1】:

在您的算法中使用测试,检查值是否为整数 0 而不是布尔值。

test = lambda x: True if x is 0 else False

list_ = [0, "A", 1 , None, False, True, 0, 0, 20, 1, 0.0]

print(sorted(list_, key=test)) #['A', 1, None, False, True, 20, 1, 0.0, 0, 0, 0]

【讨论】:

  • 问题中,0.0被视为0,如果检测到,则将其以0放在数组的末尾,而不是0.0。
  • 0.0 为 0 >>>假
  • 我试过你的方法,0.0 被放回 0.0,在问题中如果 0.0 需要为 0 并放回。例如,[1, 0, 0, 2, 0.0, 1] 应该是 [1,2,1,0,0,0]
【解决方案2】:

您可以使用 is 来进行身份比较。观察下面的例子:

>>> n = 0
>>> n is 0
True
>>> n is False
False
>>> False is n
False

【讨论】:

    【解决方案3】:

    0.0 遇到了一些问题,所以我做了一些更改

    array = [0, "A", 1 , None, False, True, 0, 0, 20, 1, 0.0]
    filt = lambda x: True if x==0 and type(x) is not bool else False
    print(sorted(array,key=filt))
    

    x==0 将允许您过滤浮点数,type(x) in not bool 将帮助您处理布尔值 False

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 2016-07-20
      • 2018-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2017-02-16
      相关资源
      最近更新 更多