我有一个函数是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']
谢谢!
答案 0 :(得分:1)
类似的事情可能起作用:
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
以便遍历这些对)。它会忽略模式的字符是否为'_'
。
现在编写函数时,它不会考虑单词或模式的长度。
答案 1 :(得分:1)
如果您使用.
而不是_
来表示丢失的字符,那么您基本上就有了一个正则表达式,例如:
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...
答案 2 :(得分:0)
检查以下代码:
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_”,则将无法正常工作。如果您需要类似的内容,请修改您的问题。
答案 3 :(得分:0)
此代码将过滤以提供的模式开头且与该模式一样长的单词(包括“ _”字符):
def filter_words_list(words, pattern):
pattern_len = len(pattern)
pattern = pattern.split('_')[0]
relevant_words = []
for word in words:
if len(word) == pattern_len and word.startswith(pattern):
relevant_words.append(word)
return relevant_words
words = ['aardvark', 'aardwolf', 'aaron', 'aback', 'abacus', 'abaft', 'abalone']
pattern = 'ab___'
print(filter_words_list(words, pattern)) # ['aback', 'abaft']