首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表与字典进行比较并生成新列表。新列表的长度是1?

将列表与字典进行比较并生成新列表。新列表的长度是1?
EN

Stack Overflow用户
提问于 2020-03-30 10:25:10
回答 1查看 44关注 0票数 1

我试图通过比较列表A中的元素和字典中的X元素来生成一个列表B。列表B应该从字典中生成所有Y元素,其中X和List A匹配。

这是我的清单和字典(这是一个DNA翻译成蛋白质程序):

代码语言:javascript
复制
tuple = 'gagcatgttggcctggtcctttgctaggtactgtagagcaggtgagagagtgagggggaaggactccaaattagaccagttcttagccatgaagcagagactctgaagccagactacctgggtcccaatcttgggcttggtatttcctcgctgtgtgactctggactgcgccatggggctcagcgacggggaatggcagttggtgctgaacgtctgggggaaggtggaggctgacatcccaggccatgggcaggaagtcctcatcaggctctttaagggtcacccagagactctggagaagtttgacaagttcaagcacctgaagtcagaggacgagatgaaggcgtctgaggacttaaagaagcatggtgccaccgtgctcaccgccctgggtggcatccttaagaagaaggggcatcatgaggcagagattaagcccctggcacagtcgcatgccaccaagcacaagatccccgtgaagtacctggagttcatctcggaatgcatcatccaggttctgcagagcaagcatcccggggactttggtgctgatgcccagggggccatgaacaaggccctggagctgttccggaaggacatggcctccaactacaaggagctgggcttccagggctaggcccctgccgctcccacccccacccatctgggccccgggttcaagagagagcggggtctgatctcgtgtagccatatagagtttgcttctgagtgtctgctttgtttagtagaggtgggcaggaggagctgaggggctggggctggggtgttgaagttggctttgcatgcccagcgatgcgcctccctgtgggatgtcatcaccctgggaaccgggagtggcccttggctcactgtgttctgcatggtttggatctgaattaattgtcctttcttctaaatcccaaccgaacttcttccaacctccaaactggctgtaaccccaaatccaagccattaactacacctgacagtagcaattgtctgattaatcactggccccttgaagacagcagaatgtccctttgcaatgaggaggagatctgggctgggcgggccagctggggaagcatttgactatctggaacttgtgtgtgcctcctcaggtatggcagtgactcacctggttttaataaaacaacctgcaacatctca'

diction = {'aaa': 'LYS', 'aac': 'ASN', 'aag': 'LYS', 'aat': 'ASN', 'aca': 'THR', 'acc': 'THR', 'acg': 'THR', 'act': 'THR', 'aga': 'ARG', 'agc': 'SER', 'agg': 'ARG', 'agt': 'SER', 'ata': 'ILE', 'atc': 'ILE', 'atg': 'MET', 'att': 'ILE', 'caa': 'GLN', 'cac': 'HIS', 'cag': 'GLN', 'cat': 'HIS', 'cca': 'PRO', 'ccc': 'PRO', 'ccg': 'PRO', 'cct': 'PRO', 'cga': 'ARG', 'cgc': 'ARG', 'cgg': 'ARG', 'cgt': 'ARG', 'cta': 'LEU', 'ctc': 'LEU', 'ctg': 'LEU', 'ctt': 'LEU', 'gaa': 'GLU', 'gac': 'ASP', 'gag': 'GLU', 'gat': 'ASP', 'gca': 'ALA', 'gcc': 'ALA', 'gcg': 'ALA', 'gct': 'ALA', 'gga': 'GLY', 'ggc': 'GLY', 'ggg': 'GLY', 'ggt': 'GLY', 'gta': 'VAL', 'gtc': 'VAL', 'gtg': 'VAL', 'gtt': 'VAL', 'taa': '***', 'tac': 'TYR', 'tag': '***', 'tat': 'TYR', 'tca': 'SER', 'tcc': 'SER', 'tcg': 'SER', 'tct': 'SER', 'tga': '***', 'tgc': 'CYS', 'tgg': 'TRP', 'tgt': 'CYS', 'tta': 'LEU', 'ttc': 'PHE', 'ttg': 'LEU', 'ttt': 'PHE'}

这是我的密码:

代码语言:javascript
复制
protlist = []
for i in range(0,Len): # Len is length of tuple
    tu = tuple[3*i:3*i+3]

    if tu in diction:
        for x,y in diction.items():
            if tu == x:
                protlist = [y]
                print(*protlist,end =" ") # This prints each y value in a linear fashion
                break
print(len(protlist))  

这是我的预期输出:

代码语言:javascript
复制
GLU HIS VAL GLY LEU VAL LEU CYS *** VAL LEU *** SER ARG *** GLU SER GLU GLY GLU GLY LEU GLN ILE ARG PRO VAL LEU SER HIS GLU ALA GLU THR LEU LYS PRO ASP TYR LEU GLY PRO ASN LEU GLY LEU GLY ILE SER SER LEU CYS ASP SER GLY LEU ARG HIS GLY ALA GLN ARG ARG GLY MET ALA VAL GLY ALA GLU ARG LEU GLY GLU GLY GLY GLY *** HIS PRO ARG PRO TRP ALA GLY SER PRO HIS GLN ALA LEU *** GLY SER PRO ARG ASP SER GLY GLU VAL *** GLN VAL GLN ALA PRO GLU VAL ARG GLY ARG ASP GLU GLY VAL *** GLY LEU LYS GLU ALA TRP CYS HIS ARG ALA HIS ARG PRO GLY TRP HIS PRO *** GLU GLU GLY ALA SER *** GLY ARG ASP *** ALA PRO GLY THR VAL ALA CYS HIS GLN ALA GLN ASP PRO ARG GLU VAL PRO GLY VAL HIS LEU GLY MET HIS HIS PRO GLY SER ALA GLU GLN ALA SER ARG GLY LEU TRP CYS *** CYS PRO GLY GLY HIS GLU GLN GLY PRO GLY ALA VAL PRO GLU GLY HIS GLY LEU GLN LEU GLN GLY ALA GLY LEU PRO GLY LEU GLY PRO CYS ARG SER HIS PRO HIS PRO SER GLY PRO ARG VAL GLN GLU ARG ALA GLY SER ASP LEU VAL *** PRO TYR ARG VAL CYS PHE *** VAL SER ALA LEU PHE SER ARG GLY GLY GLN GLU GLU LEU ARG GLY TRP GLY TRP GLY VAL GLU VAL GLY PHE ALA CYS PRO ALA MET ARG LEU PRO VAL GLY CYS HIS HIS PRO GLY ASN ARG GLU TRP PRO LEU ALA HIS CYS VAL LEU HIS GLY LEU ASP LEU ASN *** LEU SER PHE LEU LEU ASN PRO ASN ARG THR SER SER ASN LEU GLN THR GLY CYS ASN PRO LYS SER LYS PRO LEU THR THR PRO ASP SER SER ASN CYS LEU ILE ASN HIS TRP PRO LEU GLU ASP SER ARG MET SER LEU CYS ASN GLU GLU GLU ILE TRP ALA GLY ARG ALA SER TRP GLY SER ILE *** LEU SER GLY THR CYS VAL CYS LEU LEU ARG TYR GLY SER ASP SER PRO GLY PHE ASN LYS THR THR CYS ASN ILE SER 390

这段代码表面上会产生正确的列表。但是,当我调用列表的长度时,它被输出为1,我尝试用protlist.append(y)替换protlist =y。这给出了正确的列表长度和错误的输出。

我还尝试使用join函数代替''.join(y),但这也给出了列表的不正确长度。

如何编辑代码以实现正确的输出和列表长度?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-30 15:44:38

获得len(protlist) = 1是因为为for x,y in diction.items()中的每个循环重新分配单个值为protlist。然后,用protlist = [y]替换protlist.append(y)会给出错误的输出,因为在每个循环中都会打印protlist

然而,首先,Len不应该是tuple的长度。元组的长度是1170,但是在每个循环中,tu都有三个字符,然后再转到接下来的三个。因此,您需要1170 / 3 = 390迭代才能到达字符串的末尾。

然后有很多方法来解决你的问题。一个像您提到的列表和联接的示例是在循环中追加值,然后在循环之外执行打印和计数。

代码语言:javascript
复制
protlist = []

for i in range(0, int(len(tuple) / 3)):
    tu = tuple[3*i:3*i+3]
    if tu in diction:
        for x, y in diction.items():
            if tu == x:
                protlist.append(y)
                break

print(' '.join(protlist)) #prints list items separated by a space
print(len(protlist))

我根据您的预期输出测试了这个结果,并给出了确切的结果。

编辑:类似的简化版本的列表理解的示例:

代码语言:javascript
复制
string = 'aaabbbcccdddeee'
dictionary = {'aaa': 'A', 'bbb': 'B', 'ccc': 'C', 'ddd': 'D', 'eee': 'E'}

parts = [ string[i:i+3] for i in range(0, len(string), 3) ]
output = [ dictionary[x] for x in parts if x in dictionary.keys() ]
print(' '.join(output))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60928504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档