比较不同列表中的项目

2024-10-05 17:44:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,是hangman的一部分,它有两个输入

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']

谢谢!你知道吗


Tags: inforlenif字母rangefilter单词
3条回答

像这样的方法可能有用:

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 True

matches = [word for word in words if match(word, pattern)]
print(matches)

它将单词的一个字母与模式的一个字符进行比较(使用^{}在这些对上进行迭代)。它忽略模式的字符是否为'_'。你知道吗

现在编写函数时,它不考虑单词或模式的长度。你知道吗

如果对缺少的字符使用.而不是_,则基本上得到了一个正则表达式,例如:

import re

words = ['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 letter
wanted3 = [word for word in words if re.match('ab.f.$', word)]
# ['abaft']
# etc...

检查以下代码:

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']

注意:它只适用于给定模式的情况,例如它以某些字符开头。例如,如果模式是“\uuu a\uuuuu”的话,它就不起作用了。如果你需要这样的问题,请编辑你的问题。你知道吗

相关问题 更多 >