我有一个不寻常的情况,函数返回零但是当我在调试器中运行时,上面的函数返回1:
def solution(A):
n = range(1, len(A)+1)
if(len(A)!=len(n)):
return 0
s = sorted(A)
if(s==n):
return 1
else:
return 0
y = solution([4, 1, 3, 2])
print(y)
这是Python中常见的行为吗?
答案 0 :(得分:2)
这样的代码可以在python 2中运行,但是python 3 range
没有返回list
但是它被保存为len
工作的范围对象(并且最好模仿一个实际的list
)。但是在python 3中:
>>> range(1,4)
range(1, 4)
>>> list(range(1,4))
[1, 2, 3]
>>> [1,2,3] == range(1,4)
False
>>> list(range(1,4)) == [1,2,3]
True
list
和range
类型不同,根据文档
除了不同的数字类型之外,不同类型的对象永远不会相等。
获得相等性,您需要将n
显式转换为列表
n = list(range(1, len(A)+1))
更简洁的工作方法:
def solution(A):
return int(sorted(A) == list(range(1,len(A)+1)))
除非您明确要返回int
或0
而不是自然1
或False
<,否则恕我直言,保持True
转换不是必需的/ p>
为什么你得到1或0取决于你的调试,可能是因为你使用了2个不同的python安装,一个用于调试,一个用于运行。如果你已经使用python 3,我建议你摆脱python 2安装。