2016-09-20 63 views
0

我需要我的循环帮助。在我的脚本中,我有两个巨大的列表(每个〜87.000整数)从输入文件中获取。如何优化带有两个元素的列表之间的交集并在python中生成没有重复列表的列表?

检查这个例子用了几个数字:

我们有两个列表:

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

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

这两个列表的顺序很重要,因为每个位置与同一关联位置在另一个列表中,所以1在​​与3ngb,34,等...

所以,我想是这样的输出:

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) 

出现问题时,我使用整个列表,因为它崩溃,并给我一个分段错误错误。那么,我能做些什么?

在此先感谢。

+0

你使用python 2或Python 3? –

+3

从nga = [1,3,5,34,12]和'ngb = [3,4,6,6,5]'到'listoflists = [[1,3,4] ,[5,6,12,34]]? –

+0

你的输入我得到了[[1,3,3,1,4,3],[3,4,1,4,3],[5,6,6,5,34,12],[34 ,6,5,6,34,12],[12,5,6,5,34,5,12]]' –

回答

0

我解决我的问题与这个美丽的功能:

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) 
相关问题