我正在尝试确定myString中的所有字母是否都在myList中找到。到目前为止,这是我的代码。
def findLetters(myList,myString):
myList = set(myList)
myString = list(myString)
myString = set(myString)
for x in myString:
if x not in myList:
return bool (False)
if x in myList:
return bool (True)
应该返回True的一个示例如下:
findLetters([ “你好”, “世界”], “老的”)
然而,我得到了假。有人能解释我哪里出错吗?
答案 0 :(得分:1)
这是Python中的一个单行程序:
def findLetters(myList, myString):
return set(myString) <= set(''.join(myList))
你有正确的想法将两个参数转换为集合,只是忘记加入字符串列表之前...然后设置包含运算符<=
非常方便
答案 1 :(得分:1)
您的代码存在的问题是您要将每个字母与字词进行比较。
在您的示例中,set(myList)
会产生{'hello', 'world'}
。然后你比较旧的&#39;中的每个字母。到这一组。正如你所看到的,这将失败(例如,字母&#39; o&#39;不在集合{&#39; hello&#39;,&#39; world&#39;}中,即使它在集合中的单词。
>>> 'o' in set(my_list)
False
您可能会发现这很有用,您可以使用集合理解从单词列表中创建一组唯一字母,然后对字符串中的唯一字母进行另一组设置。
my_list = ["hello","world"]
my_string = 'old'
list_letters = {letter for letter in word for word in my_list} # {'d', 'e', 'h', 'l', 'o', 'r', 'w'}
word_letters = set(my_string) # {'d', 'l', 'o'}
>>> word_letters.issubset(list_letters)
# Output: True
把它变成一个衬垫:
>>> set(my_string).issubset({letter for letter in word for word in my_list})
True
您的代码的另一个问题是,当您在True
(即代码的最后一行)中找到一个字母时,您不希望返回my_list
。如果您的信件不在False
,则可以返回my_list
,但如果您已遍历所有字母,则必须返回True
,例如
for word in myList:
if x not in word:
return False
return True
您也可以使用all
:
if all(x in word for word in myList):
return True
return False # Not really needed, since it would return None which is a falsey.
答案 2 :(得分:0)
这是一个解决方案。
def findLetters(myList, myString):
WordLetters = set(''.join(myList))
StringLetters = set(myString)
for s in StringLetters:
yield s, s in WordLetters
res = list(findLetters(['hello', 'world'], 'old'))
# [('d', True), ('o', True), ('l', True)]
res2 = all(list(zip(*findLetters(['hello', 'world'], 'old')))[1])
# True
答案 3 :(得分:0)
我正在尝试确定myString中的所有字母是否都在myList中找到。
您可以结合使用内置函数any
和all
来完成此操作:
>>> def findLetters(myList,myString):
return all(any(c in word for word in myList) for c in myString)
>>> findLetters(["hello","world"],"old")
True
>>>