【问题标题】:How to check if all elements in a list are in another list? [duplicate]如何检查列表中的所有元素是否在另一个列表中? [复制]
【发布时间】:2019-07-27 18:54:18
【问题描述】:

我有一个字母列表。

我需要定义一个接受两个参数的函数,第一个是字符串,第二个是字母列表。然后返回一个布尔值,指示字符串中的所有字母是否都在字母列表中。

我尝试了 for 循环,但它只会检查 0 索引而不会检查其他内容。

lettersGuessed = ['a', 'b','c', 'p', 'l', 'e']

def isWordGuessed(str, lettersGuessed):
    '''
    secretWord: string, the word the user is guessing
    lettersGuessed: list, what letters have been guessed so far
    returns: boolean, True if all the letters of secretWord are in lettersGuessed;
      False otherwise
    '''
    if all(list(str)) in lettersGuessed:
        return True
    else:
        return False
print(isWordGuessed('bcp', lettersGuessed))

【问题讨论】:

  • 字母数量重要吗? set('reed').issubset('cred') 计算结果为 True
  • @DeveshKumarSingh 你能重新打开这个问题吗?在这里使用子集不适用,因为例如如果secret_wordapple 并且letters_guessedaple 应该返回False。我有一个解决我想为 OP 发布的案例的答案。
  • @shash678 但在 OP 的情况下,lettersGuessed 是字母列表,而不是单词列表。
  • 我添加了另一个目标。操作也清楚地说Then return a bool indicating whether all letters in the string are in the list of letters or not. issubsetall 会做@shash678

标签: python


【解决方案1】:

我不推荐其中任何一个,但简单的解决方案是使用 for 循环:

for c in str:
    if c not in lettersGuessed:
        return False
return True

或理解:

return all(c in lettersGuessed for c in str)

但你不应该这样做。列表是一种根本上用于检查元素是否存在的糟糕数据结构。改为使用集合:

return all(c in lettersGuessed for c in set(str))

理想情况下,您应该从一开始就将 str 设为一个集合。有关示例,请参阅docs

最后,不要将 str 称为“str”。 “str”是 Python 本身使用的变量。当您命名其他 str 时,您将覆盖该变量。改用“string”或“real_string”或类似的东西。

【讨论】:

    【解决方案2】:

    你的回答很简单

    def isWordGuessed(str, lettersGuessed):
        return all(letter in lettersGuessed for letter in str)
    

    另外请不要使用像str 这样的内置名称作为变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 2022-01-08
      • 2021-08-24
      • 1970-01-01
      • 2021-04-14
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多