Тамас предложил хорошее решение, хотя он использует совсем другой стиль кодирования, чем вы.Тем не менее, поскольку ваш вопрос был «У меня возникли проблемы с фрагментом кода ниже», я думаю, что нужно что-то еще.
Как избежать этих проблем в будущем
Вы допустили несколько ошибок в своем подходе к переходу от «я думаю, что я знаю, как написать этот код» к фактическому рабочему коду.
Вы используете бессмысленные имена для своих переменных, что делает егоПрактически невозможно понять ваш код, в том числе и для себя.Мысль «но я знаю, что означает каждая переменная», очевидно, ошибочна, иначе вам удалось бы решить это самостоятельно.Обратите внимание ниже, где я исправляю ваш код, как трудно описать и обсудить ваш код.
Вы пытаетесь решить всю проблему сразу, а не разбивать ее на части.Напишите небольшие функции или фрагменты кода, которые выполняют только одно, по одному фрагменту за раз.Для каждой части, над которой вы работаете, сделайте это правильно и протестируйте, чтобы убедиться, что это правильно.Тогда продолжайте писать другие части, которые, возможно, используют части, которые у вас уже есть.Я говорю «кусочки», но обычно это означает функции, методы или классы.
Исправление вашего кода
Это то, что вы просили, и никто больше этого не делал.
Вам необходимо переместить строку count = 0
после строки for i in li:
(с соответствующим отступом).Это сбросит счетчик для каждого подсписка.Во-вторых, после того, как вы добавили lis
и запустили next_func
, вам нужно выйти из цикла for k in j[1:]
и охватывающего цикла for j in i:
.
Вот пример рабочего кода (безnext_func, но вы можете добавить это рядом с дополнением):
>>> li = [['>0123456789 mouse gene 1\n', 'ATGTTGGGTT/CTTAGTTG\n', 'ATGGGGTTCCT/A\n'], ['>9876543210 mouse gene 2\n', 'ATTTGGTTTCCT\n', 'ATTCAATTTTAAGGGGGGGG\n']]
>>> lis = []
>>> for i in li:
count = 0
for j in i:
break_out = False
for k in j[1:]:
if k == '/':
count += 1
if count > 1:
lis.append(i[0][1:10])
break_out = True
break
if break_out:
break
>>> lis
['012345678']
Переписать ваш код, чтобы сделать его читабельным
Это так, чтобы вы поняли, что я имел в видув начале моего ответа.
>>> def count_slashes(gene):
"count the number of '/' character in the DNA sequences of the gene."
count = 0
dna_sequences = gene[1:]
for sequence in dna_sequences:
count += sequence.count('/')
return count
>>> def get_gene_name(gene):
"get the name of the gene"
gene_title_line = gene[0]
gene_name = gene_title_line[1:10]
return gene_name
>>> genes = [['>0123456789 mouse gene 1\n', 'ATGTTGGGTT/CTTAGTTG\n', 'ATGGGGTTCCT/A\n'], ['>9876543210 mouse gene 2\n', 'ATTTGGTTTCCT\n', 'ATTCAATTTTAAGGGGGGGG\n']]
>>> results = []
>>> for gene in genes:
if count_slashes(gene) > 1:
results.append(get_gene_name(gene))
>>> results
['012345678']
>>>