Python 3.x和Python 2.x中的相同代码给出不同的结果

时间:2018-12-24 11:02:41

标签: python python-3.x python-2.x division

我建立了一个函数来计算中位数(如名称所示)。

该函数接收实例[4,5,5,4]的整数列表,并应输出4,5。

代码:

def median(lst):
    lst.sort()
    a=int(len(lst)/2)
    if len(lst) % 2 == 0:
        med=float((lst[a]+lst[a-1])/2)
    else:
        med=lst[a]
    return med
print(median([4,5,5,4]))

这在使用Python 3.x时工作正常,但在Python 2.x中则不能。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

问题是您假设Python 2和3中的除法运算符相同。取而代之(改编自mhlester):

  • 在Python 2中,/是整数除法( int 输入);

  • 在Python 3中,/是浮点除法;

  • 在Python 2和3中,//是整数除法。

为了实现您想要的,有不同的解决方法。例如:

  1. 您可以确保至少有一个除法运算符。例如:

    def median(lst):
        lst.sort()
        a=int(len(lst)/float(2))
        if len(lst) % 2 == 0:
            med=float((lst[a]+lst[a-1])/float(2))
        else:
            med=lst[a]
        return med
    print(median([4,5,5,4])) 
    
  2. 您可以使用导入from __future__ import division(此操作必须在其他任何导入之前完成)。例如:

    from __future__ import division
    
    def median(lst):
        lst.sort()
        a=int(len(lst)/2)
        if len(lst) % 2 == 0:
            med=float((lst[a]+lst[a-1])/2)
        else:
            med=lst[a]
        return med
    print(median([4,5,5,4]))