2017-02-03 6 views
1

Я понимаю, что есть много ответов, которые просто решают, как это сделать в Java, но я ищу решение, которое является концептуально похоже на реализацию, которую я мог бы выполнить в программе Python , поскольку это гораздо более знакомо мне.Сравнение char с индексом строки в java vs python

Моя функция Java cgRatio берет строку ДНК и проходит через каждый индекс, чтобы подсчитать количество символов «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

Или короче, чтобы получить такое же количество строк, как в Фитоне: 'if (dna.charAt (i) == 'C' || dna.charAt (i) == 'G')'. Таким образом, Python не превосходит Java. – IQV

+0

@Sayse Я знаю, но я не люблю начальника. – IQV

+0

Еще одна оговорка: 'dna.length()' вызывается столько раз, сколько длина длинна + 1. Python тоже этого не делает. Если ваша строка длинна в гигабайтах, извлеките ее в переменную. –

 Смежные вопросы

  • Нет связанных вопросов^_^