为了账号安全,请及时绑定邮箱和手机立即绑定

比较不同列表中的项目

比较不同列表中的项目

慕姐4208626 2021-08-14 16:05:38
我有一个函数是刽子手的一部分,它有两个输入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']
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

这样的事情可能会奏效:


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)

它将单词的一个字母与模式的一个字符进行比较(使用zip以遍历这些对)。如果模式的字符是 ,它会忽略'_'。


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


查看完整回答
反对 回复 2021-08-14
?
三国纷争

TA贡献1804条经验 获得超7个赞

如果你使用.而不是_你丢失的字符,那么你基本上有一个正则表达式,例如:


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...


查看完整回答
反对 回复 2021-08-14
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

检查以下代码:


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_”,它就不会起作用。如果您需要类似的东西,请编辑您的问题。


查看完整回答
反对 回复 2021-08-14
  • 3 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信