【发布时间】:2017-02-03 07:48:10
【问题描述】:
我意识到有很多答案可以简单地解决如何在 Java 中执行此操作,但我正在寻找一种在概念上类似于我可能在 Python 程序中执行的实现的解决方案,因为那是对我来说更熟悉。
我的 Java 函数 cgRatio 接受一个 DNA 字符串并遍历每个索引以计算字符串中“C”和“G”字符值的出现次数,并返回相对于字符串长度的比率。例如,如果我将以下字符串作为函数的参数传递:
"ATGGCGCATTAA" 我会得到 5/12 的返回值或 4.1666... 的浮点数
在 Python 中,这个函数可以这样写:
def cgRatio(dna):
count = 0
for i in range(len(dna)):
if dna[i] == "C" or dna[i] == "G":
count += 1
return 1.0 * count/len(dna)
一个简单的print cgRatio("ATGGCGCATTAA") 将产生所需的结果。
我见过一些解决方案,例如采用 dna.charAt(i) 并将其转换回字符串或在函数开头实例化新的 char 对象以进行比较。对于如此简单的任务,这似乎过于复杂。 Python 在这项任务中是否更胜一筹,还是在 Java 中有更有效的方法来解决这个问题?
【问题讨论】:
-
为什么要将它转换回字符串?
-
我想将索引处的字符串与字符进行比较。 Python 不在乎,但 Java 不会让我只使用 dna[index] == "C"。它的 Java 实现看起来像 dna.charAt(index) == ___ 但我不能使用“C”,因为它将它作为字符串读取。
-
不,Java 需要
dna[index].equals("C")。 -
@ASwiftPeregrine 比较
dna.charAt(index)和'C'而不是"C"?为什么要使用字符串文字而不是字符文字? -
顺便说一句,更好的方法是
def cgRatio(dna): return float(dna.count('C') + dna.count('G')) / len(dna)。
标签: java python string char dna-sequence