Есть ли способ преобразовать этот цикл for в понимание списка? - PullRequest
0 голосов
/ 31 октября 2019

В принципе я не уверен, есть ли какой-нибудь возможный способ преобразовать этот код в понимание списка. 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].

Тогда для всех y, у которых y [0] == x [2] в списке 3, например, [9606.ENSP00000395733, ZNF737-001, Ensembl_HGNC_trans_name Ensembl_Vega_transcript] и [9606.ENSP00000395733, ZNF7372, Ensembl_HGNC_trans_name Ensembl_Vega_transcript]

Затем мы хотим получить [["9606.ENSP00000395733", "ZNF737-001, ZNF737-002, HEX1M1"]] для списка 5 после этой итерации.

1 Ответ

0 голосов
/ 31 октября 2019

С помощью 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...