【问题标题】: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(如您的代码所示)?你有性能要求吗?您需要处理多少个前缀(例如,数量级、
  • 您的标题说检查“字符串是否包含”一个元素,但您的代码显示检查“字符串是否以”一个元素开头。你需要哪个?

标签: python arrays discord discord.py bots


【解决方案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 没错。我想它也更有效。
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2016-09-22
    • 2019-10-22
    • 2013-09-27
    • 2015-08-07
    • 2021-05-02
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多