#python #list #compare #string-formatting
#python #Список #Сравнить #форматирование строки
Вопрос:
Я пытаюсь сравнить список Python со строкой и выделить совпадения с меткой внутри новой строки. Но это не сработает. Следующий пример:
my_string = 'This is my string where i would find matches of my List'
my_list = ['THIS IS', 'WOULD FIND', 'BLA', 'OF MY LIST']
result_that_i_need = '<mark>This is</mark> my string where i <mark>would find</mark> matches <mark>of my List</mark>'
Есть ли у кого-нибудь идеи, как это решить? Кто-нибудь может мне помочь, пожалуйста?
Я попробовал следующее:
my_string = 'This is my string where i would find matches of my List'
my_string_split = string.split()
my_list = ['This is', 'would find', 'bla', 'of my List']
input_list=[]
for my_li in my_list:
if my_li in my_string:
input_list.append(my_li)
input_list_join = " ".join(input_list)
new_list = []
for my_string_spl in my_string_split:
if my_string_spl in input_list_join:
new_list.append('<mark>' my_string_spl '</mark>')
else:
new_list.append(my_string_spl)
result = " ".join(new_list)
print(result)
Комментарии:
1. Пожалуйста, добавьте свою попытку решения этой проблемы.
2. возможно, вы не захотите вызывать свой список и строку list и string
3. Спасибо pygeek и Крису, я изменил код
Ответ №1:
Может быть, что-то вроде этого:
my_string = 'This is my string where i would find matches of my List'
my_list = ['This is', 'would find', 'bla', 'of my List']
result = my_string
for match in my_list:
if match in my_string:
result = result.replace(match, '<mark>' match '</mark>')
print(result)
Вывод:
<mark>This is</mark> my string where i <mark>would find</mark> matches <mark>of my List</mark>
Комментарии:
1. Большое вам спасибо, я также попробовал это решение, но если my_list также содержит, например, ‘is my’, результат не будет показан, потому что первое совпадение было ‘This is’ и было заменено на <mark>This is</mark> -> теперь ‘my’ стоит отдельно и не предлагает совпадения с ‘is my’… вы понимаете, что я имею в виду?
2. Да, я понимаю. Если у вас есть перекрывающиеся совпадения в
my_list
, возможно, вы можете попробовать сначала объединить их, а затем попробовать вышеуказанный метод, например, повторитьmy_list
и проверить, совпадает ли конец одного совпадения с началом другого, таким образом,['This is', 'is my', 'foo']
станет['This is my', 'foo']
.3. @PApostol Это не совсем правильно. Вам нужно будет убедиться, что подстрока также не присутствует независимо в другой части строки большего размера.
4. Кроме того, ваш оператор if не нужен.
5. @pygeek верно, но не так просто. Что, если у вас есть
['Hello nice person', 'nice']
и ваша строкаHello nice person, it is nice to meet you
?