Python 如果字符串中的所有字符都在另一个字符串中,则返回True

Python 如果字符串中的所有字符都在另一个字符串中,则返回True,python,string,boolean,Python,String,Boolean,好的,对于这个问题,我要写一个函数,如果一个给定的字符串只包含另一个给定字符串中的字符,它将返回True。因此,如果我输入“bird”作为第一个字符串,输入“irbd”作为第二个字符串,它将返回True,但是如果我使用“birds”作为第一个字符串,输入“irdb”作为第二个字符串,它将返回False。到目前为止,我的代码如下所示: def only_uses_letters_from(string1,string2): """Takes two strings and returns true

好的,对于这个问题,我要写一个函数,如果一个给定的字符串只包含另一个给定字符串中的字符,它将返回True。因此,如果我输入“bird”作为第一个字符串,输入“irbd”作为第二个字符串,它将返回True,但是如果我使用“birds”作为第一个字符串,输入“irdb”作为第二个字符串,它将返回False。到目前为止,我的代码如下所示:

def only_uses_letters_from(string1,string2):
"""Takes two strings and returns true if the first string only contains characters also in the second string.

string,string -> string"""
if string1 in string2:
    return True
else:
    return False

当我尝试运行脚本时,只有当字符串的顺序完全相同或者我只输入一个字母(“bird”或“b”和“bird”与“bird”和“irdb”)时,它才会返回True

这是的一个完美用例。以下代码将解决您的问题:

def only_uses_letters_from(string1, string2):
   """Check if the first string only contains characters also in the second string."""
   return set(string1) <= set(string2)
def only_使用来自(string1,string2)的字母:
“”“检查第一个字符串是否只包含第二个字符串中的字符。”“”

返回集(string1)可以,但不是必需的(根据字符串的长度,可能效率较低)。您也可以简单地执行以下操作:

s1 = "bird"
s2 = "irbd"

print all(l in s1 for l in s2)  # True

请注意,只要在
s1
中未找到
s2
中的字母,此操作将立即停止,并返回
False

Close。更改
好的捕获。编辑了我的答案。
string2中的string1==True
iff
string1
string2
的子字符串,它将在
O(n*m)
中运行,因为它将重复通过s2。考虑“AAAAA”和“BBBA”。使用集合,它将在
O(n)
O(m)
中运行,以较大者为准。最坏情况下,是。然而,它也会短路——这是生成器的一个不可忽视的特性。性能将取决于字符串的组成。集合保证您将遍历整个列表。这种方法可以在对
s2
进行一次迭代后退出。如果列表包含许多重复的值,则性能有利于使用集合。如果
s1
不太可能是
s2
的子集,那么性能将有利于这种方法。记忆也可能是一个因素,等等。