我正在尝试比较2个字符串并检查字符串a
中是否存在字符串b
中的所有字符。我目前正在使用以下方法,将字符串转换为字典并将其与另一个字典进行比较。但是有很多机会它会产生误报。
x = 'NJITZU THE HANDS OF TIME'
y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
if Counter(x) < Counter(y):
print 'Yes'
else:
print 'No'
请建议任何更好的方法来执行此操作
答案 0 :(得分:5)
如果我正确理解您的问题,您不需要比较字典,而是设置:
>>> x = 'NJITZU THE HANDS OF TIME'
>>> y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
>>> set(x).issubset(set(y))
False
如果您想要不区分大小写的比较,可以在两个字符串上调用lower()
:
>>> set(x.lower()).issubset(set(y.lower()))
True
您还可以使用split()
来比较整个单词:
>>> set(x.lower().split())
set(['of', 'the', 'time', 'njitzu', 'hands'])
>>> set(x.lower().split()).issubset(set(y.lower().split()))
False
>>> set('SPINJITZU THE HANDS OF TIME'.lower().split()).issubset(set(y.lower().split()))
True
答案 1 :(得分:2)
我会使用set
对象。 Documentation can be found here.
x = 'NJITZU THE HANDS OF TIME'
y = 'NinjaGo Masters of Spinjitzu The Hands of Time'
if set(x.lower()) <= set(y.lower()):
print('Yes')
else:
print('No')
<
运算符重载为is_subset
。为了得到打印“是”的答案,我还将字符串转换为小写。
答案 2 :(得分:1)
您可以使用内置all功能。
all(character in y for character in x)
如果每个元素都为true,则 all()将返回true,否则返回false。我们使用in
检查字符是否在字符串y
中,我们将为每个character in x
执行此操作。