Python-如何在作为列表元素的文本中递归搜索变量子字符串

让我更好地解释标题中的意思。
搜索字符串的示例(即长度可变的字符串) 每个都是列表的元素;实际上非常大):

STRINGS = ['sftrkpilotndkpilotllptptpyrh','ffftapilotdfmmmbtyrtdll','gftttepncvjspwqbbqbthpilotou','htfrpilotrtubbbfelnxcdcz']

我肯定知道要查找的子字符串:

  • 包含在STRINGS的每个元素中
  • 也包含在SOURCE字符串
  • 具有固定的LENGTH(在此示例中为5个字符)。
SOURCE = ['gfrtewwxadasvpbepilotzxxndffc']

我正在尝试编写一个Python3程序,该程序可以找到SOURCE中5个字符的隐藏单词,并在{{1 }}。

我还试图将结果存储在数组或字典中(目前不知道哪种更方便)。

此外,我需要执行其他相同类型但具有不同STRINGS值的搜索,因此该值应由变量提供,以便更通用。

我知道 first 问题在以前的帖子中已经解决,但是 据我所知,永远不会与 second 点一起使用,这是我无法成功处理的代码的一部分(我不会发布我的代码,因为我知道它离可修复太远了。

非常感谢这个伟大社区的任何帮助。

-毛里齐奥(Maurizio)

ab13521 回答:Python-如何在作为列表元素的文本中递归搜索变量子字符串

您可以遍历源字符串,对于每个子字符串,请使用re模块来查找其他每个字符串中的位置。然后,如果每个字符串至少发现一个,则产生结果:

import re

def find(source,strings,length):
    for i in range(len(source) - length):
        sub = source[i:i+length]
        positions = {}
        for s in strings:
            # positions[s] = [m.start() for m in re.finditer(re.escape(sub),s)]
            positions[s] = [i for i in range(len(s)) if s.startswith(sub,i)]  # Using built-in functions.
            if not positions[s]:
                break
        else:
            yield sub,positions

生成器可以按以下示例所示使用:

import pprint

pprint.pprint(dict(find(
    source='gfrtewwxadasvpbepilotzxxndffc',strings=['sftrkpilotndkpilotllptptpyrh','ffftapilotdfmmmbtyrtdll','gftttepncvjspwqbbqbthpilotou','htfrpilotrtubbbfelnxcdcz'],length=5
)))

产生以下输出:

{'pilot': {'ffftapilotdfmmmbtyrtdll': [5],'gftttepncvjspwqbbqbthpilotou': [21],'htfrpilotrtubbbfelnxcdcz': [4],'sftrkpilotndkpilotllptptpyrh': [5,13]}}
本文链接:https://www.f2er.com/3079856.html

大家都在问