功能返回1,但输出为零?

时间:2018-01-20 16:18:04

标签: python algorithm list sorting data-structures

我有一个不寻常的情况,函数返回零但是当我在调试器中运行时,上面的函数返回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中常见的行为吗?

1 个答案:

答案 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

listrange类型不同,根据文档

  

除了不同的数字类型之外,不同类型的对象永远不会相等。

获得相等性,您需要将n显式转换为列表

n = list(range(1, len(A)+1))

更简洁的工作方法:

def solution(A):
    return int(sorted(A) == list(range(1,len(A)+1)))

除非您明确要返回int0而不是自然1False <,否则恕我直言,保持True转换不是必需的/ p>

为什么你得到1或0取决于你的调试,可能是因为你使用了2个不同的python安装,一个用于调试,一个用于运行。如果你已经使用python 3,我建议你摆脱python 2安装。