Dan*_*iar 2 python string performance search
我有一个大字符串和一个搜索字符串列表,并希望构建一个布尔列表,指示每个搜索字符串是否存在于大字符串中.在Python中执行此操作的最快方法是什么?
下面是一个使用天真方法的玩具示例,但我认为这可能是一种更有效的方法.
例如,下面的示例应返回[1,1,0],因为测试字符串中存在"hello"和"world".
def check_strings(search_list, input):
output = []
for s in search_list:
if input.find(s) > -1:
output.append(1)
else:
output.append(0)
return output
Run Code Online (Sandbox Code Playgroud)
search_strings = ["hello", "world", "goodbye"]
test_string = "hello world"
print(check_strings(search_strings, test_string))
我不能说这是否是最快的(这仍然是O(n*m)),但这是我这样做的方式:
def check_strings(search_list, input_string):
return [s in input_string for s in search_list]
Run Code Online (Sandbox Code Playgroud)
以下程序可能更快或更快.它使用正则表达式来传递一个输入字符串.请注意,根据您的需要,您可能希望re.escape(i)在re.findall()表达式中使用,也可以不使用.
def check_strings_re(search_string, input_string):
import re
return [any(l)
for l in
zip(*re.findall('|'.join('('+i+')' for i in search_string),
input_string))]
Run Code Online (Sandbox Code Playgroud)
这是一个完整的测试程序:
def check_strings(search_list, input_string):
return [s in input_string for s in search_list]
def check_strings_re(search_string, input_string):
import re
return [any(l)
for l in
zip(*re.findall('|'.join('('+i+')' for i in search_string),
input_string))]
search_strings = ["hello", "world", "goodbye"]
test_string = "hello world"
assert check_strings(search_strings, test_string) == [True, True, False]
assert check_strings_re(search_strings, test_string) == [True, True, False]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |