我需要查找列表中的项目是否出现在字符串中,然后将其添加到其他列表中。此代码有效:
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
,以便更好地表示问题。
最佳答案
我可以想到的一种改进方法是:
_legal
中所有单词的唯一长度line
构建单词词典。复杂度应该为O( len(line)*num_of_unique_lengths )
,这应该比蛮力好。 thing
。 代码:
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'}
关于python - 在一个字符串中查找多个子字符串,而无需对其进行多次遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64214769/