2016-04-22 130 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] 
相关问题