Python如何匹配嵌套列表值?函数循环逻辑问题求助
问题分析与代码修正
原代码存在几个关键问题:
- 多余的嵌套循环:
output中的每个元素本身就是完整的过敏记录([患者, 过敏原, 反应]),不需要再内层遍历每个元素 - 提前返回
None:第一次不匹配就直接返回None,导致后续符合条件的记录根本不会被检查 - 未使用参数
json_file:函数接收了JSON文件参数,但实际逻辑里直接用了全局变量output,不符合设计要求
修正后的代码
import json def reaction(json_file, patient, substance): # 从JSON文件读取过敏数据 with open(json_file, 'r') as f: output = json.load(f) # 遍历每条过敏记录 for allergy in output: # 匹配患者和过敏原 if allergy[0] == patient and allergy[1] == substance: return allergy[2] # 遍历完所有记录都没匹配到,返回None return None # 示例JSON文件内容(假设ALLERGIES_FILE指向的文件内容如下) # [ # ["Tom", "Bee", "Hives"], # ["Bean", "Ivy", "Bruising"], # ["Tom", "Shellfish", "Itching"] # ] # 断言验证 assert reaction(ALLERGIES_FILE, 'Tom', 'Bee') == 'Hives' assert reaction(ALLERGIES_FILE, 'Tom', 'Shellfish') == 'Itching'
关键修改说明
- 移除多余嵌套循环:直接遍历
output中的每条过敏记录,无需内层循环 - 调整返回逻辑:只有找到匹配记录时才返回反应值,遍历完所有记录都没匹配到再返回
None,不会提前终止 - 利用JSON文件参数:通过
json.load从传入的JSON文件中读取数据,不再依赖全局变量,符合函数设计的参数要求
内容的提问来源于stack exchange,提问作者Sav K.
相关产品推荐
相关产品推荐

