如何检查数组中的任何字符串是否存在于另一个字符串中?
例如:
a = ['a', 'b', 'c']
s = "a123"
if a in s:
print("some of the strings found in s")
else:
print("no strings found in s")
我如何替换如果a在s:行得到适当的结果?
如何检查数组中的任何字符串是否存在于另一个字符串中?
例如:
a = ['a', 'b', 'c']
s = "a123"
if a in s:
print("some of the strings found in s")
else:
print("no strings found in s")
我如何替换如果a在s:行得到适当的结果?
当前回答
一个惊人的快速方法是使用set:
a = ['a', 'b', 'c']
str = "a123"
if set(a) & set(str):
print("some of the strings found in str")
else:
print("no strings found in str")
如果a不包含任何多字符值(在这种情况下使用上面列出的any),则此方法有效。如果是这样,将a指定为字符串会更简单:a = 'abc'。
其他回答
这是set的另一个解。使用set.intersection。对于一行代码。
subset = {"some" ,"words"}
text = "some words to be searched here"
if len(subset & set(text.split())) == len(subset):
print("All values present in text")
if subset & set(text.split()):
print("Atleast one values present in text")
只是关于如何在String中获得所有列表元素的更多信息
a = ['a', 'b', 'c']
str = "a123"
list(filter(lambda x: x in str, a))
python文档中推荐的regex模块支持这一点
words = {'he', 'or', 'low'}
p = regex.compile(r"\L<name>", name=words)
m = p.findall('helloworld')
print(m)
输出:
['he', 'low', 'or']
实现的一些细节:link
为了增加regex的多样性:
import re
if any(re.findall(r'a|b|c', str, re.IGNORECASE)):
print 'possible matches thanks to regex'
else:
print 'no matches'
或者如果你的列表太长- any(re.findall(r'|'.join(a), str, re.IGNORECASE))
如果a或str中的字符串变长,您应该小心。简单的解决方案是O(S*(A^2)),其中S是str的长度,A是A中所有字符串长度的总和。要获得更快的解决方案,请查看用于字符串匹配的Aho-Corasick算法,该算法在线性时间O(S+A)内运行。