如何使用嵌套循环,遍历数组元素?
How to work with nested loop, looping through array elements?
来自 R 背景,我想尝试 python 中的嵌套 for 循环。我在下面的代码中循环遍历 types
的每次迭代时遇到问题。我的代码适用于 types[0]
,但不适用于连续迭代。我该如何解决?
import sys
import os
myfasta = sys.argv[1]
fasta = open(myfasta)
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
myfasta
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
预期结果:
My type index is: 0
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
My type index is: 1
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
您不能一次加载文件就可以随心所欲地对其进行迭代。
open()
returns一个迭代器,只能消费一次
调整您的代码以多次迭代您的文件
import sys
import os
myfasta = sys.argv[1]
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
fasta = open(myfasta)
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
试试这个代码:
import sys
import os
myfasta = sys.argv[1]
with open(myfasta) as f:
lines = f.readlines()
types = ['CDS', 'tRNA', 'rRNA']
for type_index, type in enumerate(types):
print('My type index is:', type_index)
flag = False
for line in lines:
if line.startswith('>') and type in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
输出
My type index is: 0
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
My type index is: 1
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
来自 R 背景,我想尝试 python 中的嵌套 for 循环。我在下面的代码中循环遍历 types
的每次迭代时遇到问题。我的代码适用于 types[0]
,但不适用于连续迭代。我该如何解决?
import sys
import os
myfasta = sys.argv[1]
fasta = open(myfasta)
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
myfasta
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
预期结果:
My type index is: 0
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
My type index is: 1
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
您不能一次加载文件就可以随心所欲地对其进行迭代。
open()
returns一个迭代器,只能消费一次
调整您的代码以多次迭代您的文件
import sys
import os
myfasta = sys.argv[1]
types = ['CDS', 'tRNA', 'rRNA']
for type in range(len(types)):
print('My type index is: ' + str(type))
flag = False
fasta = open(myfasta)
for line in fasta:
if line.startswith('>') and types[type] in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
试试这个代码:
import sys
import os
myfasta = sys.argv[1]
with open(myfasta) as f:
lines = f.readlines()
types = ['CDS', 'tRNA', 'rRNA']
for type_index, type in enumerate(types):
print('My type index is:', type_index)
flag = False
for line in lines:
if line.startswith('>') and type in line:
flag = True
elif line.startswith('>'):
flag = False
if flag:
print(line.strip())
输出
My type index is: 0
>1_CDS
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
AAAAATTTCTGGGCCCCAAAAATTTCTGGGCCCC
GGGGTTTTTTT
>2_CDS
TTAAAAATTTCTGGGCCCCGGGAAAAAA
>3_CDS
TTTGGGAATTAAACCCT
>4_CDS
TTTGGGAATTAAACCCT
My type index is: 1
>6_tRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA
My type index is: 2
>5_rRNA
TTAAAAATTTCTGGGCCCCGGGAAAAAA