有没有办法把这个for循环转换成列表理解?

2024-04-28 11:53:55 发布

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

基本上,我不确定是否有任何可能的方法将此代码转换为列表理解。list1和list3是从基因信息中提取的列表。基本上x[2]是一个基因id,y[0]也是一个基因id,y[1]是基因名。基本上,我想以列表5结束,这是一个列表列表,我可以通过循环在tsv中编写

list2 = []

list4 = []

list5 = []

for x in list1:
    for y in list3:
        if x[2] == y[0]:
            list2.append(y[1])
    list4.append(x[2])
    list4.append(",".join(list2))
    list5.append(list4)
    list2 = []
    list4 = []

对于列表1中的列表,x是[9606,hex1m1m19606.ensp0000328773]

那么对于列表3中y[0]==x[2]的所有y,例如,[9606.ensp0000395733,ZNF737-001,Ensembl\u HGNC\u trans\u name Ensembl\u Vega\u transcript]和[9606.ensp0000395733,ZNF737-002,Ensembl\u HGNC\u trans\u name Ensembl\u Vega\u transcript]

然后我们希望在迭代之后得到列表5的[[“9606.ensp0000395733”,“ZNF737-001,ZNF737-002,HEX1M1”]]


Tags: inid列表for基因hgncappendlist2
1条回答
网友
1楼 · 发布于 2024-04-28 11:53:55

您可以从list3创建一个映射dict,将第一个项中的键映射到第二个项中的值列表,这样您就可以使用列表理解来迭代list1以输出在dict中找到的键的上述映射dict中的键对列表和关联列表:

mapping = {}
for k, v, *_ in list3:
    mapping.setdefault(k, []).append(v)
list5 = [[k, ','.join(mapping[k])] for *_, k in list1 if k in mapping]

相关问题 更多 >