【问题标题】:How to find starting index of a string if it contains any element from a list of substrings如果字符串包含子字符串列表中的任何元素,如何查找字符串的起始索引
【发布时间】:2021-03-16 17:21:53
【问题描述】:

假设,我在下面有一个子字符串列表:

my_list = ["am", "is", "are"]

我想在字符串中搜索此列表的元素。如果字符串包含列表中的任何项目,则应打印字符串中此子字符串的起始索引。

字符串是:

s = "I am a Python developer."

很明显该字符串包含"am",并且该子字符串在字符串中的起始索引为2

曾经想过使用:

if "am" in s:
    print(s.find("am"))

但我只通过列表的一个元素来限制搜索操作。字符串中最多可以有一个列表项。

【问题讨论】:

  • 你的问题很混乱。你能举一个预期输出的例子吗?
  • 你了解循环了吗?

标签: python python-3.x string list


【解决方案1】:

使用循环:

for item in my_list:
    print(s.find(item))

【讨论】:

  • 谢谢,现在修好了。
【解决方案2】:

一种方法是在字符串中搜索列表中的元素,并返回第一个匹配项的索引。我们在找到的第一个匹配项上退出(因为您需要 any 元素,因此无需测试超过该点的剩余子字符串)。

def find_index_first_match(target, *args):
    for arg in args:
        search = target.find(arg)
        # If arg is not in target, search is -1.
        if search >= 0:
            return search    
    # You could return -1 here so the return's more
    # consistent with str.find's behavior.
    return None


find_index_first_match(s, *my_list)

【讨论】:

    【解决方案3】:

    你甚至可以拆分字符串并搜索:

    my_list = ["am", "is", "are"]

    s = "我是一名 Python 开发人员。" split_s = s.split()

    对于 my_list 中的项目: 如果在 split_s 中的项目: print("在字符串 s 中找到这个词:"+item)

    【讨论】:

      【解决方案4】:

      你可以遍历你的列表:

      for item in my_list:
          if item in s:
              print(s.find(item))
      

      【讨论】:

        【解决方案5】:
        my_list = ["am", "is", "are"]
        #s = "I am a Python developer."
        s = "I am a Python developer and is are blah."
        test=dict(enumerate(s.split(' '),1))
        [k for k,v in test.items() if v in my_list]
        

        输出:

        [2, 7, 8]
        

        您可以使用 enumerate 并从字符串中创建一个 dictionary 并使用带有 if 子句的列表推导来获取索引(如果它存在于您的其他列表中)。

        【讨论】:

          【解决方案6】:

          你可以用这个:

          i = min(len(s.split(w,1)[0]) for w in my_list) # 2
          

          这就是它的工作原理:

          • for p in my_list 是一个对关键词的理解
          • s.split(p,1)[0] 使用关键字 (w) 来拆分字符串并拾取拆分的左侧部分(前缀)。它将包含关键字前面的所有字符(如果关键字不存在,则包含整个字符串)
          • len(...) 获取从理解中获得的前缀的大小。这将对应于关键字的位置(索引)。
          • min(... 选择与在s 中找到的第一个关键字的索引相对应的关键字前缀的最小大小

          另一种选择是使用通过组合关键字列表形成的正则表达式:

          import re
          pattern = r'\b('+"|".join(my_list)+r')\b' # \b(am|is|are)\b
          
          i = re.search(pattern,s).start() # 2
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-27
            • 2011-12-23
            • 1970-01-01
            • 2020-02-23
            • 1970-01-01
            • 2015-07-01
            相关资源
            最近更新 更多