#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)