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



我一直在用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)

以返回CCD_ 2(因为dg在字符串B中)。

使用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

您可以使用set和&此处的交叉口操作员:

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

或者稍显冗长但可能性能更高的

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

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

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

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

如果您可以将其创建regex字符类,请使用:

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

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

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

stringA = 'abcdefg'
stringB = 'hijklmn'
print any([character in list(stringB) for character in list(stringA)])

我认为最优雅的方法是使用set:

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

另外的好处是告诉您哪些字符可以在两个字符串中找到。

试试这个:

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

最新更新