Как я могу оптимизировать пересечения между списками с двумя элементами и генерировать список списков без дубликатов в Python?

Мне нужна помощь с моей петлей. В моем сценарии у меня есть два огромных списка (~87.000 целых чисел каждый), взятых из входного файла.

Проверьте этот пример с несколькими цифрами:

У нас есть два списка:

nga = [1, 3, 5, 34, 12]

ngb = [3, 4, 6, 6, 5]

Порядок этих двух списков имеет значение, потому что каждая позиция связана с той же позицией в другом списке, поэтому 1 в nga связано с 3 в ngb, 3 с 4, так далее...

Итак, что я хочу, это вывод:

listoflists = [[1, 3, 4], [5, 6, 12, 34]]

То, что я до сих пор, это этот цикл:

listoflists = []

for p in range(0, len(nga)):
    z = [nga[p], ngb[p]]
    for a, b in zip(nga, ngb):
        if a in z:
            z.append(b)
        else:
            pass
        if b in z:
            z.append(a)
        else:
            pass
    listoflists.append(z)

Проблема возникает, когда я использовал целые списки, потому что она вылетела и вызвала ошибку ошибки сегментации. Так что я могу сделать?

Заранее спасибо.

1 ответ

Я решил свою проблему с этой прекрасной функцией:

net = []
for a, b in zip(nga, ngb):
    net.append([a, b])

def nets_super_gen(net):
    not_con = list(net)
    netn = list(not_con[0])
    not_con.remove(not_con[0])
    new_net = []
    while len(netn) != len(new_net):
        new_net = list(netn)
        for z in net:
            if z[0] in netn and z[1] not in netn:
                netn.append(z[1])
                not_con.remove(z)
            elif z[0] not in netn and z[1] in netn:
                netn.append(z[0])
                not_con.remove(z)
            try:
                if z[0] in netn and z[1] in netn:
                    not_con.remove(z)
            except ValueError:
                pass
    return(netn, not_con)

list_of_lists, not_con = nets_super_gen(net)
Другие вопросы по тегам