Python遍历嵌套列表匹配元素 生成操作符关联字典方法
嵌套列表操作符关联关系实现方案
问题背景
待处理的嵌套表达式列表结构如下:
expr_list = [['t', '=', 'a', '+1', 'b'], ['s', '=', 'd', '+2', 'e'], ['p', '=', 't', '*1', 'c'], ['q', '=', 's', '/1', 'f'], ['y', '=', 'p', '-1', 'q']]
需要基于列表内的变量引用关系生成操作符映射字典,最终期望输出:
{'+1': '*1', '+2': '/1', '*1': '-1', '/1': '-1'}
需求规则
- 逐个取每个子列表的首元素(即被赋值的变量名),和所有子列表的第3位、第5位元素(即表达式的两个运算数,对应Python索引2、4)做全量匹配
- 匹配成功后,将*变量定义所在子列表的第4位操作符(对应Python索引3)*作为字典键,匹配到的引用位置所在子列表的第4位操作符作为字典值,存入结果字典
原有代码错误点
- 仅比对了当前子列表自身的运算数,没有跨所有子列表做全量匹配
- 存在语法错误:
i[i][3]中i是数字索引,不是列表对象,无法下标取值 - 初始用列表存储结果,和最终输出字典的需求不匹配
- 变量命名用了
list,会覆盖Python内置列表类型,属于不规范写法
正确实现代码
expr_list = [['t', '=', 'a', '+1', 'b'], ['s', '=', 'd', '+2', 'e'], ['p', '=', 't', '*1', 'c'], ['q', '=', 's', '/1', 'f'], ['y', '=', 'p', '-1', 'q']] op_connector = {} for source in expr_list: defined_var = source[0] source_op = source[3] # 遍历所有子列表查找变量引用 for target in expr_list: if target[2] == defined_var or target[4] == defined_var: op_connector[source_op] = target[3] print(op_connector)
逻辑说明
- 第一层循环遍历所有赋值表达式,拿到当前表达式定义的变量名、对应的操作符
- 第二层循环遍历所有表达式,检查运算数位置是否存在对当前定义变量的引用
- 找到引用后直接写入键值对,同键重复赋值会自动覆盖,符合最终输出要求
内容的提问来源于stack exchange,提问作者user19375127
相关产品推荐
相关产品推荐

