2013-09-26 78 views
0

我有什么: 我有一个列表,nodes。每个列表具有以下结构:从列表中提取行给出两个条件

nodes = [[ID, number 1, number 2, number 3],[...]] 

我也有列出称为sampleIDsampleID2其中每个列表可以仅具有等于属于包含在总IDs的一个子集的ID数单数据的其他两个列表nodes

sampleID = [[IDa],[...]] 
sampleID2 = [[IDb],[...]], len(sampleID) + len(sampleID2) <= len(nodes) 

在某些情况下,这些名单,也可以像:

sampleID = [[IDa1,IDa2, IDa3,...],[...]] 

我想要什么: 鉴于上述三个列表,我想在一个快速的方式得到包含其中IDi==ID,I = A,B名单第四列表:

extractedlist = [[ID, number 1, number 2, number 3],[...]], len(extractedlist) = len(sampleID) + len(sampleID2) 

我的代码: 非常基本的,它的工作原理,但它需要花费大量的时间来计算:

import itertools 
for line in nodes[:]: 
    for line2,line3 in itertools.izip(sampleID[:],sampleID2[:]): 
     for i in range(0,len(line2)): 
      if line2[i]==line[0]: 
       extractedlist.append([line[0], line[1], line[2], line[3]]) 
     for j in range(0,len(line3)): 
      if line3[j]==line[0]: 
       extractedlist.append([line[0], line[1], line[2], line[3]]) 

回答

1

我不明白你的问题很好,但是这是我理解:P

node = [ .... ] 
sampleID = [ .... ] 
sampleID2 = [ .... ] 
final_ids = [] 
[final_ids.extend(list_item) for list_item in sampleID] 
[final_ids.extend(list_item) for list_item in sampleID2] 

extractedlist = [] 

for line in nodes: 
    if line[0] in final_ids: 
     extractedlist.append(line) 

希望这是你所需要的。 否则只是添加原有的输入列表和结果列表的问题,所以我可以理解你想要做什么:)

+0

它的工作原理。但是,如果不是'sampleID = [[IDa],[...]]'sampleID'是'sampleID = [[IDa1,IDa2,IDa3,...],[...]]',它也工作? 'sampleID'每行通常可以有一个ID,但在某些情况下,每行最多可以有16个ID。谢谢 – jpcgandre

+1

是的,它是有效的,因为来自list sampleID的所有值都在扩展final_ids,因此sampleID中的任何类型列表都可以工作。如果SampleId是这样的 'sampleID = [[IDa1,IDa2,IDa3,... Id16],[Id17,Id18],[ID19],[Id20,Id21,... Id31]]' Then也将其工作:) –