Как искать в строке, чтобы узнать, могу ли я написать слово
Например, у меня есть
x = "dsjcosnag"
y = "dog"
print(checkYinX(y,x))
>>true
Поэтому я думаю, что мне нужно было бы использовать цикл while в качестве счетчика для каждой буквы в y, а затем я мог бы использовать itetools для циклического перебора каждого из x, каждого цикла. Он проверял бы, если x == y, если он если он уберет его, то проверьте следующую букву в o.
Есть ли более простой способ сделать это?
2 ответа
Использование collections.Counter()
преобразовать x
а также y
на несколько множеств, затем вычтите, чтобы увидеть, все ли y
письма можно найти в x
:
from collections import Counter
def checkYinX(y, x):
return not (Counter(y) - Counter(x))
Вычитание нескольких множеств удаляет символы, когда их количество падает до 0. Если это приводит к пустому множеству, оно становится False
в логическом контексте, как и все "пустые" типы Python. not
превращает это в True
если это так.
Демо-версия:
>>> x = "dsjcosnag"
>>> y = "dog"
>>> print(checkYinX(y,x))
True
>>> print(checkYinX('cat',x))
False
Вот способ сделать это без collections.Counter
По запросу в чате:
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'))