Python 如何搜索字符串以查看是否能拼写单词

Python 如何搜索字符串以查看是否能拼写单词,python,string,itertools,Python,String,Itertools,比如我有 x = "dsjcosnag" y = "dog" print(checkYinX(y,x)) >>true 所以我想我需要使用一个while循环作为y中每个字母的计数器,然后我可以使用itetools循环x中的每个字母,每个循环它会检查x==y,如果是,它会删除它,然后检查o中的下一个字母 有更简单的方法吗?用于将x和y转换为多个集合,然后进行减法以查看是否可以在x中找到y的所有字母: 当多个字符集的计数降至0时,减去多个字符集将删除这些字符。如果这导致一个空的多集,

比如我有

x = "dsjcosnag"
y = "dog"

print(checkYinX(y,x))
>>true
所以我想我需要使用一个while循环作为y中每个字母的计数器,然后我可以使用itetools循环x中的每个字母,每个循环它会检查x==y,如果是,它会删除它,然后检查o中的下一个字母

有更简单的方法吗?

用于将x和y转换为多个集合,然后进行减法以查看是否可以在x中找到y的所有字母:

当多个字符集的计数降至0时,减去多个字符集将删除这些字符。如果这导致一个空的多集,那么在布尔上下文中它将变为False,就像所有“空”python类型一样。如果是这样的话,就不会把它变成真的

演示:


以下是一种无需收集即可完成此操作的方法。根据聊天室中的要求,计数器:

def countLetters(word):
    d = {}
    for l in word:
        d[l] = d.get(l,0) + 1
    return d

def checkSubset(answer,letters):
    a, l = countLetters(answer), countLetters(letters)
    return all(l.get(x,0) >= a.get(x) for x in a.keys())

print(checkSubset('dog','odr'))

x中字母的顺序重要吗?返回“不”起什么作用?而不是仅仅返回?我在没有not的情况下测试了它,它只是返回counter@jack:减法的结果返回一个计数器对象。如果为空,not将返回True,否则将返回False。python中的空对象在布尔上下文中测试为False。
>>> x = "dsjcosnag"
>>> y = "dog"
>>> print(checkYinX(y,x))
True
>>> print(checkYinX('cat',x))
False
def countLetters(word):
    d = {}
    for l in word:
        d[l] = d.get(l,0) + 1
    return d

def checkSubset(answer,letters):
    a, l = countLetters(answer), countLetters(letters)
    return all(l.get(x,0) >= a.get(x) for x in a.keys())

print(checkSubset('dog','odr'))