如何在python中将布尔值从一个数组移动到另一个数组

时间:2017-07-02 14:47:55

标签: python arrays boolean

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

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

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

5 个答案:

答案 0 :(得分:1)

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

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]

答案 1 :(得分:0)

您可以将所有值比较为字符串

if (str(my_list[i])=="0"):
#where i is iterative

如果您需要留意零字符串而不是整数,请进行类型检查以确保它和int。

答案 2 :(得分:0)

您可以使用进行身份比较。请注意以下示例:

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

答案 3 :(得分:0)

以下是sorted的另一种选择。

>>> x = [1, 0, 'A', 5, 0, 'foo', 0.0, True]
>>> sorted(x, key=lambda x: not x is 0, reverse=True)
[1, 'A', 5, 'foo', 0.0, True, 0, 0]

答案 4 :(得分:0)

我遇到了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