尝试转换rna字符串时出现不可损坏的类型错误

2024-10-03 19:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在我目前正在研究的代码中,我有一本名为codon_dict的字典,其中列出了所有三个字母的密码子,这些密码子可以翻译成各自的氨基酸。我还有一个名为rnaCodonTable的表,它的值是单个字母的氨基酸,键是它对应的三个字母的密码子。我要做的是得到一个每三个碱基对的rna碱基字符串,从我的字典中识别出它是密码子,然后把它翻译成它们编码的单字母氨基酸。这是我目前为止的设置:

for i in range (0, len(self.codon_dict), 3): 
            codon = self.codon_dict[i:i+3] 
            print (codon)
            if codon in NucParams.codon_dict():
                self.codon_dict[codon] +=1

#codons are then converted to amino acids.
            temp_aa = NucParams.rnaCodonTable(codon)
            if temp_aa in self.aa_dict:
                self.aa_dict[temp_aa] += 1

我收到了这个错误消息:密码子=自我密码子[我:我+3] TypeError:不可损坏类型:“slice”

我不知道我做错了什么。有人能给我解释一下这个错误吗?在

以下是rnaCodonTable的外观:

^{pr2}$

Tags: 代码inselfif字典错误字母temp
1条回答
网友
1楼 · 发布于 2024-10-03 19:22:17

could someone explain to me the error?

字典是一个键查找表,键必须是散列的。在您的代码中,i:i:3的值属于不可损坏类型slice,它不能是字典的键。在

以下是您的错误的简化版本,使用另一种不易损坏的类型,列表:

>>> d = {}  # An empty dictionary
>>> d[[1,2]] = 3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

我想我明白你想做什么,我相信你有一个代表RNA链的字符串,像这样:

^{pr2}$

您想从rnaCodonTable字典中获得相应的密码子。在

所以,问题是把RNA链分成三个字母的位,然后你可以在密码子表中查找:

要使生活更轻松,请使用^{} recipe

from itertools import izip_longest

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x')  > ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

s = 'AUUGCUAAAAAGGAGGAUUUUCG'

codons = []

for pair in grouper(s, 3):
    codons.append(rna_codon_table[''.join(pair)])

print('Codons: {}'.format(''.join(codons))

grouper将返回一个元组,而我们的键是字符串,因此我们用一个空字符串连接元组以创建一个三个字母的配对:

>>> for pair in grouper(s, 3):
...    print(pair)
...
('A', 'U', 'U')
('G', 'C', 'U')
('A', 'A', 'A')
('A', 'A', 'A')
('G', 'G', 'A')
('G', 'G', 'U')
('U', 'U', 'U')
('U', 'C', 'G')
>>> for pair in grouper(s,3):
...     print(''.join(pair))
...
AUU
GCU
AAA
AAA
GGA
GGU
UUU
UCG

接下来,我们获取每个三个字母对对应的密码子并将它们存储在一个列表中。最后,我们将列表打印为一个字符串。在

可以将循环合并到生成器中,然后直接使用它,如下所示:

codons = ''.join(rna_codon_table[''.join(pair)] for pair in grouper(s, 3))

我根据Python style guide把你字典的大小写改了。在

相关问题 更多 >