如何搜索字符串以查看我是不是可以拼写单词
Posted
技术标签:
【中文标题】如何搜索字符串以查看我是不是可以拼写单词【英文标题】:How to search through a string to see if i can spell a word如何搜索字符串以查看我是否可以拼写单词 【发布时间】:2013-03-29 14:43:59 【问题描述】:比如我有
x = "dsjcosnag"
y = "dog"
print(checkYinX(y,x))
>>true
所以我想我需要使用一个while循环作为y中每个字母的计数器,然后我可以使用itetools循环遍历每个x,每个循环它会检查x == y , 如果是,则将其删除,然后检查 o 中的下一个字母。
有没有更简单的方法来做到这一点?
【问题讨论】:
x
中的字母顺序重要吗?
【参考方案1】:
使用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
【讨论】:
return 'not' 是做什么的?而不是仅仅返回?我在没有 not 的情况下对其进行了测试,它只返回 counter() @jack:减法的结果返回一个Counter()
对象。如果为空,not
返回True
,否则返回False
。 python 中的空对象在布尔上下文中测试为False
。【参考方案2】:
根据聊天中的要求,这是一种不使用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'))
【讨论】:
以上是关于如何搜索字符串以查看我是不是可以拼写单词的主要内容,如果未能解决你的问题,请参考以下文章
如何在整个消息中搜索一个单词,将该单词分解为一个数组,然后检查其他数组以查看它是不是匹配?