【问题标题】:Is there anyway to convert this for loop into list comprehension?反正有没有将此 for 循环转换为列表理解?
【发布时间】:2019-10-31 18:23:12
【问题描述】:

基本上我不确定是否有任何可能的方法可以将此代码转换为列表理解。 list1 和 list3 是从基因信息中提取的列表列表。所以基本上x[2]是一个gene_id,y[0]也是一个gene_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 = []

对于 list1 中的列表,x 为 [9606,HEX1M1,9606.ENSP00000328773]。

然后对于所有在 list3 中具有 y[0] == x[2] 的 y,例如,[9606.ENSP00000395733,ZNF737-001,Ensembl_HGNC_trans_name Ensembl_Vega_transcript] 和 [9606.ENSP00000395733,ZNF737-002,Ensembl_HGNC_trans_name Ensembl_HGNC_trans_name Ensembl ]

然后我们想在迭代之后为列表 5 获取 [["9606.ENSP00000395733", "ZNF737-001, ZNF737-002,HEX1M1"]]。

【问题讨论】:

  • 它是什么语言?蟒蛇?
  • 你能描述一下这是做什么的吗?一个或多个示例会有所帮助。
  • 是python@PM77-1
  • 使用Edit 为您的问题添加详细信息。
  • 老实说,对于这有多复杂,我会避免列表理解。每当您觉得自己在死记硬背逻辑时,为了可维护性而将其保留为 for 循环是值得的

标签: python python-3.x for-loop list-comprehension


【解决方案1】:

您可以从 list3 创建一个映射字典,将第一项中的键映射到第二项中的值列表,以便您可以使用列表推导式迭代 list1 以输出键对列表以及来自上述映射字典的相关列表,用于在字典中找到的键:

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

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 2017-11-23
    • 2021-05-27
    • 2020-03-29
    • 1970-01-01
    相关资源
    最近更新 更多