我想编写Python代码以使用“字母”列表从“单词”中搜索匹配项。 我创建了以下两个列表-单词和字母:
word = ['hello', 'how', 'are', 'you', 'potato']
letter = ['how', 'ell', 'aaa', 'bbb', 'tat', 're']
我想要得到的是以下输出作为列表,以及“单词”和“字母”列表之间的映射结果。 如果匹配了完整的字符串,则结果将返回“ True”。 如果部分字符串匹配,则结果将返回“ True”。 如果字符串的nil部分匹配,则结果将返回“ False”。
word_result = ['True', 'True', 'True', 'False', 'True']
我尝试使用for循环/ if ... else / import re,但无法获得所需的结果。
有人可以帮忙吗?
非常感谢您!
我使用以下代码进行了测试,但无法正常工作
:word = ['hello', 'how', 'are', 'you', 'potato']
letters = ['ell', 'how', 'aaa', 'bbb', 'tat', 're']
def check_match():
for l in letters:
if l in word:
print(l)
print(check_match())
预期结果:
word_result = ['True', 'True', 'True', 'False', 'True']
答案 0 :(得分:4)
对any
使用列表理解:
word = ['hello', 'how', 'are', 'you', 'potato']
letters = ['ell', 'how', 'aaa', 'bbb', 'tat']
def check_match():
return [any(x in i for x in letters) for i in word]
print(check_match())
输出:
[True, True, False, False, True]
答案 1 :(得分:0)
我不确定您的预期输出是否正确。 这是应该起作用的代码:
def check_match():
res = []
for l in letters:
for w in word:
if l in w:
res.append(True)
break
else:
res.append(False)
return res
输出:
[True, True, False, False, True]
编辑: 现在我得到了您的问题...首先,向您显示不同的输入:
word = ['hello', 'how', 'are', 'you', 'potato']
letter = ['how', 'ell', 'aaa', 'bbb', 'tat', 're']
然后使用了不同的方法:
word = ['hello', 'how', 'are', 'you', 'potato']
letters = ['ell', 'how', 'aaa', 'bbb', 'tat']
第二,您要检查来自word
的单词是否具有来自letters
的相应字母。您所需要做的就是切换循环:
def check_match():
res = []
for w in word:
for l in letters:
if l in w:
res.append(True)
break
else:
res.append(False)
return res
输出:
[True, True, True, False, True]
答案 2 :(得分:0)
您没有部分匹配的精确定义,这使得难以完全回答您的问题。
但是,我们可以将此(缺失的)智慧范围限制为一个函数:
def partial_match(word, letter):
...
其余逻辑可以通过嵌套循环轻松编写:
words = ['hello', 'how', 'are', 'you', 'potato']
letters = ['ell', 'how', 'aaa', 'bbb', 'tat']
results = []
for word in words:
result = False
for letter in letters:
if word == letter or partial_match(word, letter):
result = True
break
results.append(result)
循环的内部是编程中的常见设计模式,Python使用any()
原语并将内部循环重写为一种理解方式,为此提供了捷径:
results = []
for word in words:
result = any(
word == letter or partial_match(word, letter)
for letter in letters)
results.append(result)
或更紧凑,重写两个循环都是一种理解:
results = [
any(
word == letter or partial_match(word, letter)
for letter in letters)
for word in words]
现在,让我们专注于partial_match()
,如果您想要确保letter
中包含word
,例如:
partial_match('how', 'ow') == True
partial_match('how', 'ho') == True
partial_match('how', 'o') == True
partial_match('how', 'oww') == False
partial_match('how', 'wow') == False
partial_match('how', 'hoe') == False
partial_match('how', 'xxx') == False
然后您可以简单地使用:
def partial_match(word, letter):
return letter in word
,并注意到精确匹配(由word == letter
描述)也将满足partial_match()
,而您通过省略==
内联{{1 }}和几个重命名。
如果您的partial_match()
不同,则以上所有内容仍然有效,您只需要优化该功能即可。