在下面的代码中,我想计算序列中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')
答案 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
位于文件顶部