字符串中的所有字母都显示在列表中

时间:2018-03-19 01:37:12

标签: python list boolean

我正在尝试确定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([ “你好”, “世界”], “老的”)

  

然而,我得到了假。有人能解释我哪里出错吗?

4 个答案:

答案 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中找到。

您可以结合使用内置函数anyall来完成此操作:

>>> def findLetters(myList,myString):
    return all(any(c in word for word in myList) for c in myString)

>>> findLetters(["hello","world"],"old")
True
>>>