我最近在解决编码问题。它要求我将一个数组中的所有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放入另一个数组中。 谢谢。
答案 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