2013-09-26 3 views
0

내가 가지고있는 것 : 목록 목록 인 nodes이 있습니다.두 가지 조건이 주어진 목록에서 행 추출

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

I는 각리스트에 포함되는 총 IDs의 서브 세트에 속하는 ID 수와 같은 단일 데이터만을 가질 수있다 sampleIDsampleID2라는 목록 두 목록이 각리스트는 다음과 같은 구조를 가지고 nodes :

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

어떤 경우에는 이러한 목록도 할 수 있습니다와 같은 :

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

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

내 코드 : 아주 나는 빠른 방법으로, 내가 A, B = IDi==ID 목록을 포함 네 번째 목록을 확보하고자 을 감안할 때 위의 세 가지 목록을 : 내가 원하는 무엇

기본, 그것은 작동하지만 계산 시간이 많이 걸립니다 :

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

예 sampleID의 모든 유형 목록이 작동 할 수 있도록 listID의 모든 값이 final_ids를 확장하기 때문에 작동합니다. SampleId가 다음과 같은 경우 'sampleID = [[IDa1, IDa2, IDa3, ... Id16], [Id17, Id18], [ID19], [Id20, Id21, ... Id31]]' 그런 다음 또한 그것의 T는 작품 :) –

관련 문제