You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用字典推导式遍历列表的列表?正确语法是什么?

我懂你的问题啦——你现在要处理嵌套列表里的氨基酸,从translation字典里找出对应的密码子,但原代码因为只遍历了外层的子列表,没法匹配到里面的单个氨基酸字符,对吧?

先说说你原代码的问题:你写的for aa in v_list这一步,遍历的是v_list里的每个子列表(比如['A']),而不是子列表里的单个氨基酸('A')。这样一来,AA == aa其实是拿字典里的字符串(比如'A')和列表(['A'])做比较,自然永远匹配不上,也就得不到你想要的结果。

接下来根据你的需求给你两种解决方案:

情况1:收集所有匹配的密码子(生成集合)

如果你的目标是把所有对应v_list中氨基酸的密码子收集到一个集合里,只需要在推导式里多加一层循环,遍历每个子列表里的元素就行:

v_list = [['A'], ['V']]
# 假设你的translation字典是类似 {'GCU': 'A', 'GCC': 'A', 'GUU': 'V', 'GUC': 'V'} 这样的结构
test = {codon for codon, AA in translation.items() 
        for sublist in v_list  # 先遍历外层的每个子列表
        for aa in sublist      # 再遍历子列表里的每个氨基酸
        if AA == aa}

这样就能正确遍历到'A'和'V',匹配字典里的氨基酸值,得到对应的密码子集合。

情况2:保留嵌套结构,替换氨基酸为密码子

如果你的需求是保留原嵌套列表的层级结构,把每个氨基酸替换成对应的密码子(比如把[['A'], ['V']]转成[['GCU', 'GCC'], ['GUU', 'GUC']]),那可以用嵌套的列表推导式来实现:

v_list = [['A'], ['V']]
# 生成和原结构一致的密码子列表
result = [[[codon for codon, AA in translation.items() if AA == aa] for aa in sublist] for sublist in v_list]

这样得到的结果会完美保留原嵌套层级,每个子列表里的氨基酸都会被替换成对应的密码子列表。

额外:如果需要生成氨基酸到密码子的字典

你提到了“字典推导式”,如果你的目标是生成一个只包含v_list中氨基酸的映射字典,那可以先把嵌套列表扁平化,再用字典推导式:

v_list = [['A'], ['V']]
# 先扁平化嵌套列表,拿到所有唯一的氨基酸
all_aas = {aa for sublist in v_list for aa in sublist}
# 用字典推导式生成氨基酸到对应密码子的映射
aa_to_codons = {aa: [codon for codon, val in translation.items() if val == aa] for aa in all_aas}

这样得到的aa_to_codons就是{'A': ['GCU', 'GCC'], 'V': ['GUU', 'GUC']}这样的结构,方便后续调用。

内容的提问来源于stack exchange,提问作者dk09

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:35:22