所以,这个问题是上一篇文章Python-script, which should translate 1000 DNA-Sequences to proteins by 1152 different codontables, don't work的延续。从那时起我在PyCharm编辑了脚本,现在这个脚本看起来很像:
import yaml
file = open('/home/ihor/Документи/біоінформатика/DNA_Sequence72 - Копія.py', 'r')
DNA = file.read()
DNA_Sequences = DNA.split(',')
Genetic_Codes = open('/home/ihor/Документи/біоінформатика/Genetic_Codes.py', 'r')
Genetic_Codes = Genetic_Codes.read()
Genetic_Codes_list = Genetic_Codes.split('\n')
for row in range(1152): #for str in list[Genetic_Codes_list] in range(1152):
Alternative_Genetic_Codes = Genetic_Codes_list.pop(0)
for line in range(1000):
dna = DNA_Sequences.pop(0)
codontable = yaml.load(Alternative_Genetic_Codes)
codontable_sequence = ""
for i in range(0, len(dna)-(3 + len(dna) % 3), 3):
if codontable.get(dna[i:i + 3], codontable_sequence) == "_":
break
codontable_sequence += codontable.get(dna[i:i + 3], codontable_sequence)
print(list([codontable_sequence]))
现在这个脚本只有一个错误:
IndexError:从空列表中弹出
在调试器中研究变量之后,我看到,行DNA_Sequences
中的变量DNA_Sequences = DNA.split(',')
被分配了值' [](空列表)'。我的脚本将1000个DNA序列的字符串列表仅转换为1个密码子(字典),但是我希望,这个脚本在一次运行中通过1152个不同的密码表将1000个DNA序列的字符串列表转换为蛋白质。我阅读了很多有关此错误的教程和其他来源,列表等,但我没有找到解决问题的方法。所有其他变量完全没问题。如何用空列表修复此错误?我非常感谢你的帮助。
答案 0 :(得分:2)
for line in range(1000):
dna = DNA_Sequences[line]
从数组中删除项目,因此外部循环的第一次迭代会创建一个空数组。解决方案是按索引访问数组项而不删除它们:
ImageDataGenerator#flow_from_directory
答案 1 :(得分:0)
你的代码毫无意义。但是,答案是检查元素是否为空,如果是这样的话。
for row in range(1152): #for str in list[Genetic_Codes_list] in range(1152):
Alternative_Genetic_Codes = Genetic_Codes_list.pop(0)
for line in range(1000):
if len(DNA_Sequences) == 0:
pass
else:
dna = DNA_Sequences.pop(0)
codontable = yaml.load(Alternative_Genetic_Codes)
codontable_sequence = ""
for i in range(0, len(dna)-(3 + len(dna) % 3), 3):
if codontable.get(dna[i:i + 3], codontable_sequence) == "_":
break
codontable_sequence += codontable.get(dna[i:i + 3], codontable_sequence)
print(list([codontable_sequence]))
您应该使用biopython
或类似内容。