TypeError: sequence item 0: expected str instance, list found in python 3

TypeError: sequence item 0: expected str instance, list found in python 3

我试图将 RNA 序列作为输入并得到其各自的密码子作为输出。

例如:

输入:AUGGGAACUUCACUACGUAAAUAG

输出:密码子是:AUG, GGA, ACU, UCA, CUA, CGU, AAA, UAG

我在 Python 3.8 中这样编码:

rna = input("Enter the RNA sequence:")
list1 = []
rna = list(rna)

for i in range(len(rna)):
    list2 = []
    list2.append(rna[i : i + 3 : 3])
    liststr = "".join(list2)
    list1.append(liststr)

 print(list1)

但是,我收到错误 TypeError: sequence item 0: expected str instance, list found。这段代码有什么问题?

你把事情搞得太复杂了。您只需要维护一个列表,一次遍历字符串三个字符。无需将字符串转换为列表,反之亦然。

rna = input("Enter the RNA sequence:")
result = []
for i in range(0, len(rna), 3):
    result.append(rna[i:i+3])
print(result)

使用样本输入,这会产生:

['AUG', 'GGA', 'ACU', 'UCA', 'CUA', 'CGU', 'AAA', 'UAG']

在您的代码中,list2 是一个列表列表。

但是 str.join 不适用于列表的列表。考虑一个最小的例子:

>>> a = [[1, 2, 3], [4, 5, 6]]
>>> ''.join(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, list found

您需要将每个列表连接成一个字符串。类似于:

list2 = [''.join(lst) for lst in list2]