使用Python执行“如果字符串a包含字符串b中的任何字母”

时间:2015-03-23 05:39:53

标签: python string python-2.7

我一直在用Python编程,但我能想到的所有方法都是愚蠢的,我觉得必须有更好的方法。

是否有快速方式(可能是1行或2行?):

if (stringA.containsAnyLetterIn(stringB)):
    do stuff

例如,我想要

stringA = 'abcdefg'
stringB = 'hijklmn'
print stringA.containsAnyLetterIn(stringB)

返回False,我想要

stringA = 'dog'
stringB = 'abcdefg'
print stringA.containsAnyLetterIn(stringB)

返回True(因为dg在stringB中)。

5 个答案:

答案 0 :(得分:9)

使用any函数和in运算符,就像这样

any(char in stringB for char in stringA)

演示:

>>> stringA, stringB = 'abcdefg', 'hijklmn'
>>> any(char in stringB for char in stringA)
False
>>> stringA, stringB = 'dog', 'abcdefg'
>>> any(char in stringB for char in stringA)
True

如果您想要一个有效的解决方案,请将stringA转换为一个集,然后检查该集和stringB是否为disjoint,如此

>>> stringA, stringB = 'abcdefg', 'hijklmn'
>>> not set(stringA).isdisjoint(stringB)
False
>>> stringA, stringB = 'dog', 'abcdefg'
>>> not set(stringA).isdisjoint(stringB)
True

答案 1 :(得分:4)

您可以使用set和&这里的交叉口运营商:

>>> bool(set('abcdefg') & set('hijklmn'))
>>> bool(set('abcdefg') & set('dog'))

或稍微冗长但可能更高效的

>>> bool(set('abcdefg').intersection('hijklmn'))

(更快,因为第二个字符串之前未转换为集合。)

如果你需要获得所有常见字符,这是特别好的:

>>> set('abcdefg') & set('dog')
set(['d', 'g'])

如果你可以制作它的正则表达式字符类,请使用:

>>> import re
>>> bool(re.search('[abcdefg]', 'hijklmn'))
False
>>> bool(re.search('[abcdefg]', 'dog'))
True

现在,如果它是一个用户输入字符串,那么创建它的字符类可能有点棘手。

答案 2 :(得分:2)

将字符串转换为list,然后使用list comprehension检查列表中的每个字符。

stringA = 'abcdefg'
stringB = 'hijklmn'

print any([character in list(stringB) for character in list(stringA)])

答案 3 :(得分:2)

我会说最优雅的方式是使用set

>>> stringA = 'abcdefg'
>>> stringB = 'hijklmn'
>>> set(stringA).intersection(stringB)
set()
>>> stringA = 'dog'
>>> stringB = 'abcdefg'
>>> set(stringA).intersection(stringB)
{'d', 'g'}

还有一个额外的好处,就是告诉你可以在两个字符串中找到哪些字符。

答案 4 :(得分:0)

试试这个:

bool(set(a) & set(b))