Сопоставление строк в Python и выдача повторных чисел для несопоставленных строк - PullRequest
0 голосов
/ 26 октября 2018

У меня есть несколько слов в list1: "management consultancy services better financial health"

user_search="management consultancy services better financial health"
user_split = nltk.word_tokenize(user_search)
user_length=len(user_split)

Назначение: менеджмент = 1, консультации = 2, услуги = 3, лучше = 4, финансовый = 5, здоровье =6.Затем сравните это с набором некоторых списков.

list2: ['us',
 'paleri',
 'home',
 'us',
 'consulting',
 'services',
 'market',
 'research',
 'analysis',
 'project',
 'feasibility',
 'studies',
 'market',
 'strategy',
 'business',
 'plan',
 'model',
 'health',
 'human' etc..]

Таким образом, любое совпадение будет отражаться на соответствующих позициях как 1,2 3 и т. Д. Если позиции не совпадают, то позиции заполняются цифрой 6 на словах.Пример ожидаемого вывода:

[1]  7 8 9 10 11 3  12 13 14 15 16 17 18 19 20 21 22 6 23 24

Это означает строки 3 и 4, т.е.услуги и здоровье есть в этом списке (соответствует).Другие цифры обозначают непревзойденный. user_length=6.Так что непревзойденные позиции будут начинаться с 7. Как получить такой ожидаемый результат в питоне?

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете использовать itertools.count, чтобы создать счетчик и выполнить итерации с помощью next:

from itertools import count

user_search = "management consultancy services better financial health"
words = {v: k for k, v in enumerate(user_search.split(), 1)}

# {'better': 4, 'consultancy': 2, 'financial': 5,
#  'health': 6, 'management': 1, 'services': 3}

L = ['us', 'paleri', 'home', 'us', 'consulting', 'services',
     'market', 'research', 'analysis', 'project', 'feasibility',
     'studies', 'market', 'strategy', 'business', 'plan',
     'model', 'health', 'human']

c = count(start=len(words)+1)
res = [next(c) if word not in words else words[word] for word in L]

# [7, 8, 9, 10, 11, 3, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 6, 23]
...