2017-02-03 1 views
1

Java로 처리하는 방법을 간단하게 해결하는 많은 답변이 있음을 알고 있지만에서 구현할 수있는 구현과 개념적으로 비슷한 솔루션을 찾고 있습니다. 그것이 나에게 훨씬 친숙하기 때문에.Java와 Python의 문자열 인덱스 비교 char을

Java 함수 cgRatio은 DNA 문자열을 가져 와서 모든 문자열을 검색하여 문자열의 "C"및 "G"문자 값의 수를 계산하고 문자열 길이에 비례하여 비율을 반환합니다. 나는 함수의 인수로 다음 문자열을 전달하는 경우 예를 들어, : "ATGGCGCATTAA" 내가 5/12의 반환 값 또는 4.1666... 파이썬에서

의 float를 얻을 것이다,이 기능은 그래서 같이 쓸 수있다 :

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 개체를 인스턴스화하는 등의 솔루션을 보았습니다. 이것은 단순한 작업에 지나치게 복잡해 보입니다. 파이썬이이 작업에서 우월한가요? 아니면 Java에서이 문제를 해결할 더 효율적인 방법이 있습니까?

+0

왜 다시 문자열로 변환 하시겠습니까? – Sayse

+0

인덱스의 문자열을 문자와 비교하려고합니다. 파이썬은 신경 쓰지 않지만 Java는 나를 그냥 dna [index] == "C"로 내버려 두지 않을 것입니다. 자바 구현은 dna.charAt (index) == ___과 비슷하지만 "C"는 문자열로 읽으므로 사용할 수 없습니다. – ASwiftPeregrine

+0

아니요, Java에는'dna [index] .equals ("C")'가 필요합니다. – IQV

답변

3

간단한 자바 코드는 다음과 같습니다

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')'. 그래서 파이썬은 자바보다 우월하지 않습니다. – IQV

+0

@ Sayse 알아,하지만 나는 상사를 좋아하지 않아. – IQV

+0

또 다른 경고 :'dna.length()'는 문자열이 long + 1 인만큼 여러 번 호출됩니다. 또한 Python은 이것을하지 않습니다. 문자열이 기가 바이트 인 경우 변수에 추출하십시오. –