Мне нужно сравнить 2 вложенных списка в python, чтобы найти, где строка из первого списка не совпадает со строкой во втором списке

#python #nested-lists #unification #first-order-logic

#python #вложенные списки #объединение #логика первого порядка

Вопрос:

Если у меня есть эти 2 списка:

 list1 = ['P', ['f', 'X', 'a'], ['g', 'Y', ['f', 'a']]]
list2 = ['P', ['f', ['f', 'a'], 'a'], ['g', 'X', ['f', 'X']]]
  

В этих 2 списках в первом вложенном списке у нас есть [‘f’, ‘X’, ‘a’] и [‘f’, [‘f’, ‘a’], ‘a’] соответственно для list1 и list2.
Мне нужно найти эти ситуации и заменить несопоставимые строки (или списки). Например, в этих 2 подсписках мне нужно заменить [‘f’, ‘a’] на ‘X’, чтобы в конце оба списка были одинаковыми. (Это для объединения логики первого порядка).

Пока у меня есть следующий код для сопряжения моих списков, но я не знаю, куда идти дальше:

 list1 = ['P', ['f', 'X', 'a'], ['g', 'Y', ['f', 'a']]]
list2 = ['P', ['f', ['f', 'a'], 'a'], ['g', 'X', ['f', 'X']]]


temp = len(list1) * '% s = %% s, '
res = temp % tuple(list1) % tuple(list2)
print("The paired elements string is : "   res)
  

Где я получаю следующий вывод:

 P = P, ['f', 'X', 'a'] = ['f', ['f', 'a'], 'a'], ['g', 'Y', ['f', 'a']] = ['g', 'X', ['f', 'X']]

  

Любая помощь или рекомендации будут оценены. Я очень новичок в python.

Комментарии:

1. list1 = [‘P’, [‘f’, ‘X’, ‘a’], [‘g’, ‘Y’, [‘f’, ‘a’]]]

2. чувствительно ли сравнение к регистру?

3. @AryanMishra да, это так

Ответ №1:

 list2 = ['P', ['f', ['f', 'a'], 'a'], ['g', 'X', ['f', 'X']]]

def repList(mlist):
    rlist = []
    i = 0
    while i < len(mlist):
        f = False
        if i < len(mlist) - 2 and type (mlist[i]) == str and type(mlist[i 1]) == list and type (mlist[i   2]) == str:
            sublist = mlist[i   1]
            if len(sublist) == 2 and mlist[i] == sublist[0] and mlist[i   2] == sublist[1]:
                f = True
        if f : 
            rlist.append(mlist[i])
            rlist.append('X')
            rlist.append(mlist[i 2])
            i  = 2
         elif type(mlist[i]) == list:
            rlist.append(repList(mlist[i]))
         else: 
            rlist.append(mlist[i])
         i =1

return rlist

list3 = repList(list2)
print (list3)