Python 3中的除法与Python 2中的结果不同

时间:2013-07-08 16:45:01

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

在下面的代码中,我想计算序列中G和C字符的百分比。在Python 3中,我正确得到0.5,但在Python 2上我得到0。为什么结果不同?

def gc_content(base_seq):
    """Return the percentage of G and C characters in base_seq"""
    seq = base_seq.upper()
    return (seq.count('G') + seq.count('C')) / len(seq)

gc_content('attacgcg')

3 个答案:

答案 0 :(得分:7)

/是Python 3中的另一个运算符;在Python 2中/在应用于2个整数操作数时改变行为并返回分区结果:

>>> 3/2   # two integer operands
1
>>> 3/2.0 # one operand is not an integer, float division is used
1.5

添加:

from __future__ import division

到代码的顶部,使/在Python 2中使用float division,或使用//强制Python 3使用整数除法:

>>> from __future__ import division
>>> 3/2    # even when using integers, true division is used
1.5
>>> 3//2.0 # explicit floor division
1.0

使用这些技术中的任何一种都适用于Python 2.2或更高版本。请参阅PEP 238了解更改原因的细节。

答案 1 :(得分:2)

在python2.x中/执行整数除法。

>>> 3/2
1

要获得所需的结果,您可以使用float()将其中一个操作数更改为浮点数:

>>> 3/2.      #3/2.0
1.5
>>> 3/float(2)
1.5

或使用division中的__future__

>>> from __future__ import division
>>> 3/2
1.5

答案 2 :(得分:1)

对于Python2 /是整数除法,当分子和分母都是int时,你需要确保强制浮点除法

例如

return (seq.count('G') + seq.count('C')) / float(len(seq))

或者,你可以把

from __future__ import division

位于文件顶部