给定两个条件,从列表中提取行

时间:2013-09-26 09:49:55

标签: python list extract

我拥有的: 我有一个列表列表nodes。每个列表都具有以下结构:

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

我还有另外两个名为sampleIDsampleID2的列表列表,其中每个列表可能只有一个等于ID个数的单个数据,该数字属于总数IDs的一个子集1 {}包含在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 个答案:

答案 0 :(得分: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)
希望这就是你所需要的。 否则只需添加原始输入列表和结果列表,这样我就能理解你想要做什么:)