比较不同列表中的项目

我有一个函数是刽子手的一部分,它有两个输入


filter_words_list(words, pattern):

我需要一种方法来从特定位置的单词中知道单词中的字母与模式中的字母(未覆盖的)相同,并且这些字母在同一位置。此外,单词和模式的长度应该相同


这是我试过的:


def filter_words_list(words, pattern):

    relevant_words = []

    for word in words:

        if len(word) == len(pattern):

            for i in range(len(word)):

                for j in range(len(pattern)):

                    if word[i] == pattern[j] and i == j:

                        relevant_words.append(word)

print(relevant_words)


filter_words_list(['aardvark', 'aardwolf', 'aaron', 'aback', 'abacus', 

'abaft', 'abalone'],'ab___',))

打印:不好......正如你在这里看到的:


['aaron', 'aback', 'aback', 'abaft', 'abaft']

我需要的印刷品:


['aback', 'abaft']


慕姐4208626
浏览 176回答 3
3回答

qq_笑_17

这样的事情可能会奏效:words = ('aardvark', 'aardwolf', 'aaron', 'aback', 'abacus','abaft', 'abalone')pattern = 'ab___'def match(word, pattern):    # also need to match the length?    # if len(word) != len(pattern):    #     return False    for letter, p in zip(word, pattern):        if p == '_':            continue        if letter != p:            return False    return Truematches = [word for word in words if match(word, pattern)]print(matches)它将单词的一个字母与模式的一个字符进行比较(使用zip以遍历这些对)。如果模式的字符是 ,它会忽略'_'。现在编写函数时,它不考虑单词或模式的长度。

三国纷争

如果你使用.而不是_你丢失的字符,那么你基本上有一个正则表达式,例如:import rewords = ['aardvark', 'aardwolf', 'aaron', 'aback', 'abacus', 'abaft', 'abalone']# starting with ab followed by exactly 3 characters ($ means match end of string)wanted = [word for word in words if re.match('ab...$')]#  ['aback', 'abaft']# starting with ab followed by at least 3 characters (notice no $ here)wanted2 = [word for word in words if re.match('ab...', word)]# ['aback', 'abacus', 'abaft', 'abalone']# starting with ab, followed by any letter, followed by "f", and exactly one letterwanted3 = [word for word in words if re.match('ab.f.$', word)]# ['abaft']# etc...

慕的地6264312

检查以下代码:def filter_words_list(words, pattern):    relevant_words = []    pat = pattern.replace("_","")    for word in words:        if word.startswith(pat):            relevant_words.append(word)    print(relevant_words)filter_words_list(['aardvark', 'aardwolf', 'aaron', 'aback', 'abacus','abaft', 'abalone'],'ab___',)输出:['aback', 'abacus', 'abaft', 'abalone']注意:它仅在给出模式的情况下起作用,例如它以某些字符开头。例如,如果模式是“__a_”,它就不会起作用。如果您需要类似的东西,请编辑您的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python