如果可能的话,我正在寻找能够获得更好性能的解决方案:
我有一个router_port描述列表(大约1.5百万)和要查找的模式列表(大约30000个元素)
router_port列表中的元素如下所示:
['tgn-11-2-ho\TenGigE0\7\GGH-12JH-SE\Te22\SFP-10G\Te22']
pattern_list中的一个元素,如:
('tgn-11-2-ho', 'GGH-12JH')
规则是,元组的第一部分必须位于router_port元素的开头,第二部分可以位于router_port的任何位置。
实际上我按以下方式搜索:
def search_for_pattern(pattern1, pattern2):
pos_list = [position for position, port in enumerate(router_port)
if port.startswith(pattern1) and pattern2 in port]
return pos_list
工作正常,但由于它会产生30000个循环,需要一段时间才能完成。
使用python 3.5有更有效的方法吗?
答案 0 :(得分:1)
如何在读取路由器端口文件时构建此数据结构:
function exp_script() {
wp_enqueue_script( 'script_name', get_template_directory_uri() . '/js/script_file.js', array( 'jquery' ), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'exp_script' );
现在你可以做到
port_info = dict()
def process_port(line_num, port_desc):
parts = port_desc.split("\\")
head = parts[0]
try:
port_head_info = port_info[head]
except KeyError:
port_head_info = dict()
port_info[head] = port_head_info
for i, part in enumerate(parts):
if i == 0:
continue
try:
port_head_info[part].append(line_num)
except KeyError:
port_head_info[part] = [line_num]
with open('router_ports', 'r', encoding='utf8') as f:
for line_num, line in enumerate(f, 1):
process_port(line_num, line)