修复将空列表分配给值 "DNA_Sequence" 的错误

Fixing an error with assigning of empty list to value "DNA_Sequence"

因此,本题是上一题postPython-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: pop from empty list

在调试器中研究变量后,我看到,DNA_Sequences = DNA.split(',') 行中的变量 DNA_Sequences 被赋值为“[](空列表)”。我的脚本仅通过 1 个密码子表(字典)将 1000 个 DNA 序列的字符串列表翻译成蛋白质,但我想要的是,这个脚本通过一个 [=24 上的 1152 个不同的密码子表将 1000 个 DNA 序列的字符串列表翻译成蛋白质=].我阅读了很多关于此错误的教程和其他资源、列表等,但我没有找到解决我的问题的方法。所有其他变量都完全没问题。如何用空列表修复此错误?非常感谢您的帮助。

您的代码毫无意义。但是尽管如此,答案还是检查元素是否为空,如果是则通过。

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 或类似的东西。

pop 从数组中删除项目,因此外循环的第一次迭代会创建一个空数组。解决方案是通过索引访问数组项而不删除它们:

for line in range(1000):
    dna = DNA_Sequences[line]