Python CodeWars Kata将零移到列表末尾
嘿,伙计们,我几乎解决了这个kata问题,但我的代码一直未能通过这个测试。有什么想法吗Python CodeWars Kata将零移到列表末尾,python,algorithm,katacoda,Python,Algorithm,Katacoda,嘿,伙计们,我几乎解决了这个kata问题,但我的代码一直未能通过这个测试。有什么想法吗 def move_zeros(array): n = len(array) count = 0 for i in range(n): if array[i] is not 0: if type(array[i]) != int or type(array[i]) != float: array[c
def move_zeros(array):
n = len(array)
count = 0
for i in range(n):
if array[i] is not 0:
if type(array[i]) != int or type(array[i]) != float:
array[count] = array[i]
count += 1
else:
array[count] = array[i]
count += 1
while count < n:
array[count] = 0
count += 1
return array
def移动零点(数组):
n=len(数组)
计数=0
对于范围(n)中的i:
如果数组[i]不是0:
如果类型(数组[i])!=int或type(数组[i])!=浮动:
数组[计数]=数组[i]
计数+=1
其他:
数组[计数]=数组[i]
计数+=1
当计数
这是失败的测试:
[9,0.0,9,1,2,1,1,0.0,3,1,9,9,0,0,0,0,0,0]
应等于[9,9,1,2,1,3,1,9,9,0,0,0,0,0,0,0]
我假设它是一个浮点值,所以我尝试用第二个if语句解释它,但没有用。在比较数字时不要使用
is not
。这不是预期用途。而是使用=
比较运算符
是
而不是
或用于比较实际对象,而不是文字。比较数字时不要使用不是
。这不是预期用途。而是使用=
比较运算符
是
,而不是
,或用于比较实际对象,而不是文字。深入探讨为什么使用is无法实现此功能:
is
检查对象是否确实指向同一对象。所有数字在python中都是对象,但是0
的int
对象与0.0
的float
对象不同
在“引擎盖”下,这些对象通过定义一个合适的
\uuuuueq\uuuu
方法,允许int
s和float
s之间相等,该方法是调用0==0.0时最终使用的方法,深入探讨由于使用is而无法工作的原因:
is
检查对象是否确实指向同一对象。所有数字在python中都是对象,但是0
的int
对象与0.0
的float
对象不同
在“引擎盖”下,这些对象通过定义一个合适的\uuuueq\uuueq
方法,允许int
s和float
s之间相等,这是调用0==0.0
时最终使用的方法。不要使用is
进行比较,使用=
。重复给定的[0,0.0,False,None],答案是[False,None,0,0.0]还是[False,None,0,0]?不要使用is
进行比较,使用=
。给定[0,0.0,False,None,0,0.0]的副本是[False,None,0,0.0]还是[False,None,0,0,0]?是的,但即使两个int
具有相同的值,它们也可以/将是不同的对象。在标准python解释器上尝试a=123456789
,b=123456789
,a是b
。啊!另一个有趣的事实是,当你给一个变量赋值时,它实际上变成了它自己的独立对象,所以在这种情况下你实际上创建了两个不同的对象。因此,a
是一个对象,其内存地址代表数字123456789,而b
位于另一个。因此,123456789是123456789
有效,而将它们分配给变量的示例则无效。显然,这仅适用于像您的示例这样的“足够大”的数字。我尝试了字节边界,但1个字节有效,而2个字节无效,我不知道在这两者之间的什么地方会下降。是的,对不起,我应该提到这一点。这里有一篇关于范围的好文章,请注意,这只是标准python解释器的一个实现细节,在例如pypy中可能有所不同,因此您不应该依赖is
为int
s实现平等。嘿,伙计们,谢谢你们的回复,但我使用的原因不是因为另一个原因如果我使用,测试失败=代码>:[1,无,2,1,0,0]应等于[1,无,2,False,1,0,0]
是与原代码一起出现故障的代码。当我使用is not
时,此测试通过。是的,但即使两个int
s可以/将是不同的对象,即使它们具有相同的值。在标准python解释器上尝试a=123456789
,b=123456789
,a是b
。啊!另一个有趣的事实是,当你给一个变量赋值时,它实际上变成了它自己的独立对象,所以在这种情况下你实际上创建了两个不同的对象。因此,a
是一个对象,其内存地址代表数字123456789,而b
位于另一个。因此,123456789是123456789
有效,而将它们分配给变量的示例则无效。显然,这仅适用于像您的示例这样的“足够大”的数字。我尝试了字节边界,但1个字节有效,而2个字节无效,我不知道在这两者之间的什么地方会下降。是的,对不起,我应该提到这一点。这里有一篇关于范围的好文章,请注意,这只是标准python解释器的一个实现细节,在例如pypy中可能有所不同,因此您不应该依赖is
为int
s实现平等。嘿,伙计们,谢谢你们的回复,但我使用的原因不是因为另一个原因如果我使用,测试失败=代码>:[1,无,2,1,0,0]应等于[1,无,2,False,1,0,0]
是与原代码一起出现故障的代码。当我使用不是
时,此测试通过。嘿,谢谢你的回复,但我使用不是
的原因是,如果我使用,则另一个测试失败=代码>:[1,无,2,1,0,0]应等于[1,无,2,False,1,0,0]
是与原代码一起出现故障的代码。当我使用不是时,这个测试通过了