从数据集中删除不匹配的项目

时间:2014-05-22 18:16:34

标签: python list dataset matching nested-lists

我有两个由嵌套列表列表组成的数据集,这样列表中的每个项目都看起来像list1[i]= [a, x, y b]list2[j] = [c, x, y, d],并且两个列表的长度不一定匹配。我希望能够浏览列表,保留其顺序,并消除任何不包含匹配x值的子列表。最后,我想得到两个长度相同的列表,每个索引的位置,x值在相应的子列表中是相同的。

现在我的代码有点混乱,假设x中的list2值集合是list1中的x的一部分(此时为真),然后继续执行删除 len_diff = len(list1) - len(list2) if len_diff > 0: removed = [] for (counter, row) in enumerate(list2): while list1[counter][1] != list2[counter][1]: removed.append(list1.pop(counter)) new_len_diff = len(list1) - len(list2) if new_len_diff < 0: raise IndexError('Data sets do not completely overlap') else: for i in range(new_len_diff): removed.append(temp_data.pop()) 值不匹配的项目。

x

所以基本上我删除任何不匹配list1值的项目,直到它们再次开始匹配,然后删除x超出list2值的结尾在list1中(如果我从x切出太多而引发异常。)

有更好的方法吗?

我不一定要放松假设list2list1中的所有{{1}}值目前都在{{1}},但它会使这段代码对我更有用其他数据操作的未来。我代码中最大的漏洞就是如果我的list1数据中存在空白,我将删除整个列表。

1 个答案:

答案 0 :(得分:1)

你应该试试这个:

list1 = list2 = [x for x in list1 if x[1] in zip(*list2)[1]]

修改

根据以下评论,OP根据需要调整了这个答案

list1 = [x for x in list1 if x[1] in zip(*list2)[1]]
list2 = [x for x in list2 if x[1] in zip(*list1)[1]]