Как я могу оптимизировать пересечения между списками с двумя элементами и генерировать список списков без дубликатов в 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)