2017-02-03 8 views
1

私はJavaでそれを行う方法を単純に解決する多くの答えがあることを認識していますが、の実装と概念的に似ているそれは私にははるかによく知られているからです。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でこれを行うより効率的な方法がありますか?

+0

なぜ文字列に変換するのですか? – Sayse

+0

インデックスの文字列を文字と比較したいと思います。 Pythonは気にしませんが、Javaは私にdna [index] == "C"を許可しません。 Javaの実装はdna.charAt(index)== ___のように見えますが、文字列として読み取るため "C"は使用できません。 – ASwiftPeregrine

+0

いいえ、Javaには 'dna [index] .equals(" C ")'が必要です。 – IQV

答えて

3

単純なJavaコードは次のようになります。

for (int i = 0; i < dna.length(); i++) { 
    char c = dna.charAt(i);   
    if (c == 'C' || c == 'G') { 
    count++; 
    } 
} 
return (double)count/dna.length(); 

それらを比較するために、「文字列」に文字を変換する理由は全くありません!

そして、あなたも「少ない」コードソリューションを探している場合には、あなたのスタイル「それぞれの」使用することができます読み

for (char c : dna.toCharArray()) { 

、理解しやすい素敵な、しかし作成の費用で来ますa new char array

+0

Phytonの場合と同じ行数を得るには、以下のようにします: 'if(dna.charAt(i)== 'C' || dna.charAt(i)== 'G')'。したがって、PythonはJavaより優れていません。 – IQV

+0

@Sayse私は知っているが、私は上司が好きではない。 – IQV

+0

もう一つの警告: 'dna.length()'は、文字列がlong + 1であるときに何度も呼び出されます。また、Pythonはこれをしません。文字列がギガバイトの長さの場合は、それを変数に抽出します。 –