如何检查字符串是不是包含数组中的任何元素[关闭]
Posted
技术标签:
【中文标题】如何检查字符串是不是包含数组中的任何元素[关闭]【英文标题】:How do I check if a string contains ANY element in an array [closed]如何检查字符串是否包含数组中的任何元素[关闭] 【发布时间】:2021-08-02 03:44:48 【问题描述】:我正在尝试检测字符串是否包含数组中的任何元素。我想知道字符串(msg)中是否包含数组(前缀)中的任何元素。
我想要这个,因为我想制作一个带有多个前缀的不和谐机器人,这是我的垃圾 if 语句。
if msg.startswith(prefixes[any]):
【问题讨论】:
您必须使用for
循环。
你能展示一些示例代码,输入和输出吗?
只是为了确定:您要检查any
element
是否是in
string
for
每个element
in
array
?
您是否尝试搜索任何子字符串(如您所说)或任何 prefix(如您的代码所示)?你有性能要求吗?您需要处理多少个前缀(例如,数量级、
您的标题说检查“字符串是否包含”一个元素,但您的代码显示检查“字符串是否以”一个元素开头。你需要哪个?
【参考方案1】:
现有答案显示了进行线性搜索的两种方法,这可能是您的最佳选择。
如果您需要更具可扩展性的东西(即,您有 很多 个潜在前缀,它们很长,和/或您需要非常频繁地扫描),那么您可以写一个 @987654321 @。这是解决此问题的规范搜索结构,但显然还需要很多工作,您仍然需要进行概要分析,看看它是否真的对您的数据有价值。
【讨论】:
【参考方案2】:试试这样的:
prefixes = ('a','b','i')
if msg.startswith(prefixes):
prefixes
必须是元组,因为startswith 函数不支持将列表作为参数。
【讨论】:
我不完全知道如何将其放入我的代码中,我更新了帖子以包含更多内容。对不起,我没有从一开始就这样做,我是堆栈溢出的新手。 @Tal 好的,没问题。我会更新我的答案。【参考方案3】:有这样的搜索算法,但是,Python 中的函数实现可能如下所示:
prefixes = ['foo', 'bar']
string = 'foobar'
result = any(map(lambda x: string.startswith(x), prefixes))
如果您在string
的任何位置搜索x
,则将string.startswith(x)
更改为x in string
。
更新 根据 cmets 中的@MisterMiyagi,以下是更易读(可能更高效)的语句:
result = any(string.startswith(prefix) for prefix in prefixes)
【讨论】:
FWIW,any(string.startswith(prefix) for prefix in prefixes))
可能比map
+ lambda
组合更容易理解。
@MisterMiyagi 没错。我想它也更有效。以上是关于如何检查字符串是不是包含数组中的任何元素[关闭]的主要内容,如果未能解决你的问题,请参考以下文章