Я бы рекомендовал преобразовать ['A', 'B', '*', 'D']
в '^AB.*D$'
, ['A', 'B', 'C', 'C', 'C', 'D']
в 'ABCCCD'
, а затем использовать модуль re
(регулярные выражения) для сопоставления.
Это будет допустимо, если элементы ваших списков имеют только один символ каждый, и если они являются строками.
что-то вроде:
import(re)
def myMatch( patternList, stringList ):
# convert pattern to flat string with wildcards
# convert AB*D to valid regex ^AB.*D$
pattern = ''.join(patternList)
regexPattern = '^' + pattern.replace('*','.*') + '$'
# perform matching
against = ''.join(stringList) # convert ['A','B','C','C','D'] to ABCCCD
# return whether there is a match
return (re.match(regexPattern,against) is not None)
Если в списках содержатся цифры или слова, выберите символ, в котором вы и не ожидаете, например #
. Затем ['Aa','Bs','Ce','Cc','CC','Dd']
можно преобразовать в Aa#Bs#Ce#Cc#CC#Dd
, шаблон подстановочного знака ['Aa','Bs','*','Dd']
можно преобразовать в ^Aa#Bs#.*#Dd$
и выполнить сопоставление.
На практике это означает, что все ''.join(...)
становится '#'.join(...)
в myMatch
.