使用字典理解来遍历列表列表

use dictionary comprehension to iterate over a list of list

对列表的列表进行列表理解的正确语法是什么?我正在使用字典。理解将一个值转换为列表列表中的另一个值,但我无法让它完成整个列表列表。这是我拥有的:

v_list = [['A'], ['V']]
test = {codon for (codon,AA) in translation.items() for aa in v_list if AA == aa}

如果 v_list 只是一个普通列表,这行代码可以工作,但我需要将字母保留在列表中的单独列表中。

使用

v_list[0][0]

可行,但我需要一个自动遍历列表中所有列表的解决方案,而不仅仅是我硬编码到程序中的列表。

谢谢!

编辑 很抱歉对这个问题感到困惑。我的字典看起来像这样:

translation = {'TTT': 'F', 'TCT': 'S', 'TAT': 'Y', 'TGT': 'C',
                 'TTC': 'F', 'TCC': 'S', 'TAC': 'Y', 'TGC': 'C',
                 'TTA': 'L'}

我的输入是这样的:

in = [['S'],['F']]

所以我想将所有 'S' 拉入 in[0][0] 并将所有“F”拉入 in[1][1]。但是 'in' 的长度未知,是用户作为解析对象输入的内容。所以我的输出应该是这样的:

out = [['TCT', 'TCC'], ['TTT', 'TTC']]

感谢您的帮助。

你会使用类似的东西:

{codon for codon, AA in translation.items() for bb in v_list for aa in bb if AA == aa}

您可以添加多级 for x in y 以循环访问嵌套结构的多级。几个简单的例子:

a =  [[1,2,3],[4,5,6]]     # unwrapping a list two levels deep
[c for b in a for c in b]  # gives [1, 2, 3, 4, 5, 6]

a = [[[1,2],[3,4]],[[5,6],[7,8]]]     # a list of lists of lists
[d for b in a for c in b for d in c]  # gives [1, 2, 3, 4, 5, 6, 7, 8]

显然,您可能会过度执行此操作,并且当您这样做时,事情会变得难以追踪,请谨慎使用。

嵌套列表输出

制定 OP 规范,即

v_list = [['S'],['F']]
translation = {
    'TTT': 'F', 'TCT': 'S', 'TAT': 'Y', 'TGT': 'C', 'TTC': 'F', 
    'TCC': 'S', 'TAC': 'Y', 'TGC': 'C', 'TTA': 'L'
}

# expected output : [['TCT', 'TCC'], ['TTT', 'TTC']]

我想你会想要:

[[codon for codon, aa in translation.items() if aa in pp] for pp in v_list]
# [['TCT', 'TCC'], ['TTT', 'TTC']]

平装

如果您真正想要的是平面集(如 ),那么我会建议以下内容,它只遍历 v_list 一次,有些人可能会觉得更具可读性:

amino_acids = {aa for pp in v_list for aa in pp}
{codon for codon, aa in translation.items() if aa in amino_acids}
# {'TCC', 'TCT', 'TTT', 'TTC'}