我有两个数据集由嵌套列表组成,这些列表中的每个项目看起来像list1[i]= [a, x, y b]
和list2[j] = [c, x, y, d]
,并且两个列表的长度不一定匹配。我希望能够通过列表,保留它们的顺序,并消除任何不包含匹配值x
的子列表。最后,我想得到两个相同长度的列表,并且对于每个索引,x
值在相应的子列表中是相同的。删除数据集中不匹配的项目
现在我有一个假定,list2
设定x
值的是那些在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())
所以基本上我删除,直到他们重新开始匹配,然后在list2
去除list1
末超越x
值(抛出一个异常,如果我剪太不x
值相匹配的项目大部分出自list1
)。
有没有更好的方法来做到这一点?
我不一定需要放宽当前list2
中的所有x
值都在list1
这一假设,但它会使此代码在将来对其他数据操作更有用。现在我的代码中最大的漏洞是,如果我的list1数据存在差距,我将删除我的整个列表。
这看起来像做什么被通缉在这种情况下,您可能希望查看将列表转换为集合并使用set_diff = set_one.difference(set_two)。 – Tylerflick
@Tylerflick如果OP要保留订单,请不要使用 – jonrsharpe
对于您上面列出的列表@ user47487,您的期望结果如何? – cdhagmann