如何检查字符串是不是包含数组中的任何元素[关闭]

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 没错。我想它也更有效。

以上是关于如何检查字符串是不是包含数组中的任何元素[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是包含数组的任何元素[重复]

Java - 如何检查字符串是不是包含字符串数组的元素?

如何检查字符串是不是包含列表的任何元素并获取元素的值?

检查字符串是不是包含Python中数组中的多个元素

C# 检查字符串是不是包含字符串数组中的任何匹配项

检查字符串(句子空格分隔)以查看它是不是包含数组中的任何字符