2016-04-22 2 views
0

Заголовок немного расплывчатый, вот моя проблема.Как уменьшить содержимое списка на основе значений другого списка?

Я пытаюсь уменьшить содержимое одного списка на основе значений справа и слева от элемента в другом списке.

Пример:

Если У меня есть следующие 2 списка.

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

и мое ограничение а = Ь + 1

Я хочу вернуть

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

1 и 7 не может быть в, потому что нет нет 0 или 6 в б.

3 не может быть в b, потому что нет 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) 

с идеей, что я буду тогда делать а = с и Ь = d, но результат я получаю

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

Я полностью понимаю, почему я получаю эти числа в c и d, но я боюсь, что логика подхода к получению правильных чисел полностью ускользает от меня. Это небольшой подмножество большего проекта, который мне нужно сделать, но я особенно увлекся этой частью. Любая помощь будет оценена по достоинству.

+0

Я думаю, вы могли бы решить эту проблему с каким-то алгоритм Левенштейна. Добавьте 1 к каждому элементу из b, сравните два списка и сохраните элементы, которые являются совпадением (т. Е. Удалите все вставки и удаления из a и b соответственно), а затем вычтите 1 из каждого элемента b снова. –

ответ

1

Один простой и может быть неэффективным ответом (отредактирован список понимания):

c = [el for el in a if (el-1) in b] 
d = [el for el in b if (el+1) in a] 
Смежные вопросы