def move_zeros(array):
no_zero = [i for i in list(array) if i != int(0)]
print(array)
print(no_zero)
for i in range(array.count(0)):
no_zero.append(0)
return no_zero
这是我用于代码学院kata的代码,目的是将列表数组内的所有零移动到数组的前面。我的代码在大多数情况下都有效,但是在某些情况下代码卡住了,例如,它将False视为零,并且将值也视为0.0,我该如何更改它以使其影响原义数字0
编辑:要求提供示例算法的输出
move_zeros([false,1,0,1,2,0,1,3,"a"])
returns[false,1,1,2,1,3,"a",0,0]
我的代码返回
[1, 1, 2, 1, 3, 'a', 0, 0, 0]
答案 0 :(得分:3)
False
实际上是0
,因为bool
是int
的子类。
尽管值False
是单例的,所以您始终可以选中if i is False
来将其与0区分。
整数0
也是单例,但这是实现的细节,而不是语言的保证。我宁愿不依赖它。
也要排除float
值0.0
,则可以始终测试确切的类型:if type(i) is int
。 int
的子类将通过此测试。
答案 1 :(得分:0)
修改:
def move_zeros(array):
result = array[:]
# add here any false value you want
false_values = [0, 0.0, "0", "0.0", False, ""]
for i in result:
if i in false_values:
result.append(i) # or "0" or "0.0"
del result[result.index(i)]
return result