Предположим, у меня есть два списка строк. Я хочу изменить порядок второго списка, получив элемент, который больше всего похож на соответствующий элемент первого списка.Соответствующие элементы двух списков, которые почти одинаковы
Я уже делаю это:
import difflib
list1 = ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj']
list2 = ['eeez', 'fffz', 'dddz', 'cccz', 'iiiz', 'jjjz', 'aaaz', 'gggz', 'hhhz', 'bbbz']
len = len(list1)
i = 0
while i < len:
j = 0
while j < len:
if difflib.SequenceMatcher(None, list1[i], list2[j]).ratio() > 0.5:
eltMove = list2.pop(j)
list2.insert(i, eltMove)
break
j += 1
i += 1
print(list2)
Выход:
['aaaz', 'bbbz', 'cccz', 'dddz', 'eeez', 'fffz', 'gggz', 'hhhz', 'iiiz', 'jjjz']
Но он не работает в некоторых случаях, когда имеется элемент в list2, что соответствует немного с элементом в list1 , которые прерывают цикл и пропускают следующие элементы, даже если они могут соответствовать лучше.
Спасибо! Это именно то, что я хочу :) – Maxline
Это решение не справляется с этими данными: 'list1 = ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh ',' iiii ',' jjjj '] * 2 list2 = [' eeez ',' fffz ',' dddz ',' cccz ',' iiiz ',' jjjz ',' aaaz ',' gggz ',' hhhz ',' bbbz '] * 2 –
Спасибо @JoseRaulBarreras исправлено –