Нахождение ближайшего значения из списка? - PullRequest
3 голосов
/ 30 апреля 2020

У меня есть список строк:

list = ["END_BOOTS", "END_CHEST", "MIDAS_SWORD", "SLIME_HAT", "WOOD", "ENDER_PEARL"]

и ключевое слово:

keyword = "ENDER_BOOTS"

Мне нужно отсканировать список, чтобы найти значение, наиболее близкое к ключевому слову. , В этом случае самым близким значением будет END_BOOTS. В случае, когда такое значение не может быть найдено, код должен вернуть false.

Я пытался превратить каждое отдельное значение в список символов, сортировать его и делать то же самое с ключевым словом. После я бы сравнил их и проверил, у какого списка символов есть более общие буквы с ключевым словом. Однако это не очень хорошо работает и не очень эффективно.

Каким было бы хорошее решение этой проблемы в python 3?

Ответы [ 2 ]

3 голосов
/ 30 апреля 2020
import difflib

a = 'ENDER_BOOTS'
b = 'END_BOOTS'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d) 

L oop над списком и вернуть слово, которое получает наивысший балл

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

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

import editdistance

item_list = ["END_BOOTS", "END_CHEST", "MIDAS_SWORD", "SLIME_HAT", "WOOD", "ENDER_PEARL"]

keyword = "SLIMER_HUT"
distances = [editdistance.eval(keyword, item) for item in item_list]
match_index = distances.index(min(distances))

print(distances)
# [10, 9, 10, 2, 10, 9]

print(item_list[match_index])
# SLIME_HAT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...