Как найти точные совпадения между строками в подсписках - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть два списка, состоящих из подсписков, что-то вроде:

 conopt = [["element1","element2"],["bla"]] 
 mat = [["element1","elementA"],["bla & etc"]] 

Из этих данных я хочу заполнить матрицу размерами len (conopt) x len (mat). Поскольку python по умолчанию не имеет матрицы, я буду использовать другой список с подсписками:

finalmat = [ ["-","X",...,"X"],[...]]

Я хочу, чтобы у finalmat была буква "X", где есть полное совпадение (когда подэлемент conopt соответствует подэлементу mat) и "-" там, где его нет. Однако я забочусь только о первом полном совпадении для каждого подсписка. Если в подсписке conopt есть 1 или более совпадений в подсписке mat, результат должен быть таким же, только один «X».

Я пробовал следующее:

for i in mat:
    for j in conopt:
         for item in j:
             if item in i:
                 finalmat[mat.index(i)][conopt.index(j)] = "X"

Однако результат не верный, потому что я вручную проверил некоторые данные, и он не дает правильного результата.


некоторая дополнительная (менее важная) информация:

  • строковые элементы состоят из букв, цифр, пробелов (только пробелы между словами) и "# & "символы.

  • в подсписках есть произвольное количество строк.

  • эти данные получены из файла Excel. Я вручную извлек и изменил его так, чтобы он соответствовал синтаксису python.

  • вывод (finalmat) возвращается к первенству. Я делаю этот шаг вручную, потому что это одна задача, и я не хочу усложнять свой код еще больше.

1 Ответ

1 голос
/ 01 апреля 2020

mat.index(i) и conopt.index(j) не найдут i и j в подсписках . Я предлагаю использовать enumerate. Также убедитесь, что вы правильно инициализируете finalmat.

finalmat = [ [ "-" for j in range(len(conopt) ] for i in range(len(mat)) ]
for indexmat, itemmat in enumerate(mat):
    for indexconopt, itemconopt in enumerate(conopt):
         for item in itemconopt:
             if item in itemmat:
                 finalmat[indexmat][indexconopt] = "X"
...