在一个字符串中查找多个子字符串而无需多次迭代

亚登·加尔

我需要查找列表中的项目是否出现在字符串中,然后将其添加到其他列表中。此代码有效:

data =[]
line = 'akhgvfalfhda.dhgfa.lidhfalihflaih**Thing1**aoufgyafkugafkjhafkjhflahfklh**Thing2**dlfkhalfhafli...'
_legal = ['thing1', 'thing2', 'thing3', 'thing4',...] 
for i in _legal:
    if i in line:
        data.append(i)

但是,代码会反复line(可能很长)多次-重复其中的次数_legal(可能很多)。这对于我来说太慢了,我正在寻找一种更快的方法。据我所知,line它没有任何特定的格式,因此.split()无法使用编辑:更改,line以便更好地表示问题。

SomeDude

我可以想到的一种改进方法是:

  • 获取中所有单词的唯一长度 _legal
  • line使用滑动窗口技术这些特定长度构建单词词典复杂度应该是O( len(line)*num_of_unique_lengths ),这应该比蛮力好。
  • 现在thing在O(1)的字典中查找每个

码:

line = 'thing1 thing2 456 xxualt542l lthin. dfjladjfj lauthina '
_legal = ['thing1', 'thing2', 'thing3', 'thing4', 't5', '5', 'fj la']
ul = {len(i) for i in _legal}
s=set()
for l in ul:
    s = s.union({line[i:i+l] for i in range(len(line)-l)})
print(s.intersection(set(_legal)))

输出:

{'thing1', 'fj la', 'thing2', 't5', '5'}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

计算一个字符串中一个或多个子字符串的出现

如何测试一个字符串是否包含多个子字符串之一?

如何查找一个字符串的多个子字符串,但是如果未找到多个子字符串,则尽管找到了许多子字符串,仍然返回

将多个子字符串匹配到一个字符串

如何替换一个字符串的多个子字符串?

从一个字符串中提取多个子字符串

前往:如何检查一个字符串是否包含多个子字符串?

如何从一个字符串中提取多个子字符串?

在一个字符串中获取两个或多个字符串

使用 for 循环在一个字符串中插入多个字符串

检查整个子字符串是否包含在一个字符串中

给定每个子字符串的范围,从Objective-C中的一个字符串中删除几个子字符串

从一个字符串中删除一组字符串,多次出现

查找数组字符串中的第一个字符

在较大的字符串中查找子字符串的第一个字符的位置

查找一个字符串中有多少个条目在另一个字符串中

查找一个字符串是否包含在R中的另一个字符串中

在一个字符串中多次使用NSAttributedString

显示多个字符串列表中的一个字符串

Java使用嵌套循环在另一个字符串中查找一个字符串出现的次数

使用 for 循环在另一个字符串中查找一个字符串

打印多个字符与打印一个字符串

Java用一个字符替换字符串中的多个字符

Python:从列表中查找与另一个字符串最接近的字符串

使用javascript在另一个字符串中查找字符串的位置

使用grep查找不在另一个字符串中的字符串

如何在另一个字符串中查找长度可变的字符串

在另一个字符串中查找自定义变量字符串

如何检测另一个字符串中的一个字符串中存在一个子字符串?