2016-04-22 7 views
0

タイトルは少し曖昧ですが、ここに私の問題があります。リストの内容を他のリストの値に基づいて減らすにはどうすればよいですか?

他のリストの項目の左右にある値に基づいて、1つのリストの内容を減らそうとしています。

例:

私は、次の2つのリストを持っている場合。

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

と私の制約は、私はBには0または6がないため

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

1と7はにすることはできません返すようにしたい= B + 1

です。

3はaに4がないのでbに入れることはできません。

私はこれにどのようにアプローチすべきかを概念化する上で問題があります。

私の現在の試みがある:私は、=のCとB = Dを行いますアイデアを

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= [1,2,2,3,3,5,8] 
d= [2,1,3,2,4,4,7] 

ですそれらの数字はcとdですが、正しい数字を得ることにアプローチする方法の論理が完全に私を逃れさせるのを恐れています。これは私がやらなければならない大規模なプロジェクトの小さなサブセットですが、特にこの部分に追いついています。どんな助けもありがとう。

+0

私はあなたがレーベンシュタイン距離アルゴリズムの一種でこれを解決することができると思います。 bの各要素に1を加え、2つのリストを比較し、一致する要素を保持する(すなわち、それぞれ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] 
関連する問題