我有兩個數據集由嵌套列表組成,這些列表中的每個項目看起來像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