2016-04-22 60 views
0

標題有點含糊,這是我的問題。如何根據另一個列表的值減少列表的內容?

我試圖根據另一個列表中項目的左側和右側的值來減少一個列表的內容。

舉例:

如果我有以下2個列表。

a = [1,2,3,5,7,8] 
b = [1,2,3,4,7] 

和我的約束是A = B + 1

我想返回

a = [2,3,5,8] 
b = [1,2,4,7] 

1和7不能在一個因爲沒有0或6 b中。

3不能在b中,因爲a中沒有4。

我有問題的概念化,我甚至應該這樣做。

我現在的嘗試是:

c = [] 
d = [] 
for i in a: 
    for j in b: 
     if (i+1) == j or (i-1) ==j: 
      c.append(i) 
      d.append(j) 

的想法,我會再做出= c和b = d,但結果我得到的是

c= [1,2,2,3,3,5,8] 
d= [2,1,3,2,4,4,7] 

我完全理解爲什麼我得到這些數字在C和D,但恐怕如何獲得正確的數字完全逃避我的邏輯。這是我必須要做的一個較大項目的一小部分,但特別是這一部分。任何幫助,將不勝感激。

+0

我想你可以用一種Levenshtein距離算法的解決這個問題。給b的每個元素加1,比較兩個列表,並保留匹配的元素(即分別從a和b中刪除所有插入和刪除),然後再從b的每個元素中減去1。 –

回答

1

一個簡單的,也許低效的答案(與列表理解編輯):

c = [el for el in a if (el-1) in b] 
d = [el for el in b if (el+1) in a] 
相關問題