我是一名python用户。我想检查一个特定的单词是否包含字符串中的字符。
例如我有一个单词" mizaner"。它的所有字符都出现在字符串" randomnizer"。
中我可以识别特定子串是否是字符串的一部分,例如。我可以验证是否"随机"是" randomnizer"的一部分。使用 if ' random' ' randomnizer':声明,但我不能对" mizaner"尽管它的所有字符都在" randomnizer"中找到,但字符混乱并且该字不能用作子字符串。有什么建议 ?
答案 0 :(得分:8)
布尔表达式
set('mizaner') <= set('randomnizer')
将返回True
,因为第一个字符串的所有字母都在第二个字符串中。如果第一个字符串中的任何字母不在第二个字符串中,则类似的表达式将返回False
。
这是有效的,因为将字符串转换为集合可以删除重复的字符,并使字符的顺序无关紧要,这正是您想要的。对于子集关系的集合测试的比较小于或等于。
答案 1 :(得分:1)
要处理字符数重要的情况,而不仅仅是字符存在,您需要:
from collections import Counter
word = "randomnizer"
searchlets = "mizaner"
if not (Counter(searchlets) - Counter(word)):
# All the letters in searchlets appeared in word
如果计数不重要,正如其他人所指出的那样:
if set(searchlets).issubset(word):
会做到这一点。从理论上讲,使用issubset
代替set(searchlets) <= set(word)
稍微好一点,因为实现可以选择避免将word
转换为set
,只需将其短路流即可子集条件在中途变得不可能。在实践中,它looks like CPython internally converts non-set
arguments to set
anyway,因此除非实施发生变化,否则两种方法大致相同。
答案 2 :(得分:0)
你可以使用:
set(word).issubset(string)
...
word="mizaner"
string="randomnizer"
if set(word).issubset(string):
print("All characters in word is in string")