我正在尝试创建一个列表理解,用于识别包含所有指定字母的所有单词。我有一个函数,它接受单词列表和字母列表,def words_with_letters(words, letters):
words_letters = list(letters)
#This would return ['t', 'e', 's', 't']然后我想做的是识别我的单词列表(单词变量)中包含字母变量(在本例中为测试)中的字母的所有单词。现在我有以下代码, test = [word for word in words if (letter for letter in words_letters) in word]我所说的是循环遍历单词的每个元素,如果指定的每个字母 (words_letters) 都在该单词中,则返回它们。不幸的是,我认为我需要稍微调整一下,但不明白我哪里出了问题。我相信它在(words_letters 中的字母对字母)部分中,我试图循环遍历所需的每个字母,words_with_letters(words, 'test')
3 回答
湖上湖
TA贡献2003条经验 获得超2个赞
all
您可能想以这种方式使用布尔表达式[word for word in words if all(letter in word for letter in words_letters)]
,但它会错过字母是否出现一次或多次。
撒科打诨
TA贡献1934条经验 获得超2个赞
all()
您可以在列表理解中使用内置 函数。
def words_with_letters(words, letters):
return [word for word in words if all(letter in word for letter in letters)]
words = ['word1', 'wtoersdt2', 'word3']
print(words_with_letters(words, 'test')) # -> ['wtoersdt2']
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
您可以使用set差异来list_comprehension查看如下所示的匹配
words = ["test_word1","tst_word2","word3_test","word4"]
letters = ['t','e','s','t']
match= [word for word in words if len(list(set(letters)-set(word)))==0]
print(match)
#will return ['test_word1', 'word3_test'] only
添加回答
举报
0/150
提交
取消