Как найти слово в списке слов, зная только определенные символы - PullRequest
0 голосов
/ 09 февраля 2020

Итак, у меня есть список слов, содержащий 3 слова:

Apple
Christmas Tree
Shopping Bag

И я знаю только определенные символы в слове и длину слова, например:

??? i ??? as? R ??

, где ? означает, что это неизвестный символ, и я хочу набрать его в консоли и получить вывод ВСЕХ слов в списке слов, содержащих эти символы в этих местах и ​​с таким количеством символов.

Есть ли способ, которым я могу достичь этого? Я хочу, чтобы моя программа работала таким же образом https://onelook.com/ работает.

Ответы [ 3 ]

7 голосов
/ 09 февраля 2020

Вы можете превратить свое выражение в регулярное выражение и попытаться сопоставить его с:

import re

words = [
    'Apple',
    'Christmas Tree',
    'Shopping Bag'
]

match = '???i???as ?r??'
regex = '^' + match.replace('?', '.') + '$'  # turn your expression into a proper regex

for word in words:    # go through each word
    if re.match(regex, word):   # does the word match the regex?
        print(word)

Вывод:

Christmas Tree
0 голосов
/ 09 февраля 2020

Если у вас есть маленький список слов, то вы можете запустить проверку регулярных выражений для всего списка слов. Преобразуйте строку запроса в регулярное выражение, и вы можете go.

В противном случае вы можете организовать список слов по частям, например, эквивалентно разделению его на несколько файлов в разных каталогах:

Appl => [ Apple ]
Chri => [ Christchurch, Christmas Tree, ... ]
Shop => [ Shopper, Shopping Bag, Shopkeeper, ]

(у вас может быть несколько уровней).

Поскольку ваш поисковый запрос выглядит как привязанный , то есть вы знаете, что он начинается в начале слова, когда вы ищете " ??? я ??? как? r ?? " вы видите, что «??? i» будет соответствовать только «Chri», и только смотреть в этот подсписок.

(На самом деле, если вам придется делать это много раз, вам лучше создать рекурсивный поиск и упорядочение списка в виде n- или "m-ary" дерева - вот несколько примеров ).

0 голосов
/ 09 февраля 2020

Попробуйте, если str находится в списке.

IF "str" IN [list]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...