Python对比两个字符串列表实现车牌匹配的方法
车牌跨传感器匹配实现方案
需求说明
需要对比两个传感器采集的车牌记录:
- 若同一车牌同时被两个传感器采集到,打印该车牌及对应的采集时间
- 若车牌仅被单个传感器采集到,打印
no match
输入数据每行包含3个字段,依次为传感器编号、采集时间、车牌号,输入样例如下:
1 12:00:00 45-NK-JX 1 12:00:03 DX-89-EH 1 12:00:09 DG-65-LN 2 12:00:10 RW-MJ-73 1 12:00:11 ZS-24-74 2 12:00:14 07-SD-12 2 12:00:18 GX-62-38 1 12:00:19 09-PQ-23 2 12:00:20 45-NK-JX 1 12:00:20 NG-24-DB
原代码问题
原逻辑存在3个核心错误:
- 仅用单个变量存储传感器采集的车牌,只能保存最后一条记录,会丢失之前所有采集数据
- 对车牌字符串直接做集合运算,实际是把字符串拆成单个字符取交集,不是车牌整体匹配
- 仅在处理传感器2的记录时做判断,传感器1独有的车牌不会输出
no match
正确实现代码
核心思路是用字典分别存储两个传感器采集到的车牌和对应时间,待所有数据读取完成后,遍历全部车牌做匹配判断:
def match_plates(): # 分别存储两个传感器的 车牌:采集时间 映射 sensor1_records = {} sensor2_records = {} # 逐行读取输入,可根据实际场景替换为文件读取逻辑 import sys for line in sys.stdin: line = line.strip() if not line: continue sensor, capture_time, plate = line.split() if sensor == "1": sensor1_records[plate] = capture_time elif sensor == "2": sensor2_records[plate] = capture_time # 收集所有出现过的车牌 all_plates = set(sensor1_records.keys()).union(set(sensor2_records.keys())) for plate in all_plates: in_s1 = plate in sensor1_records in_s2 = plate in sensor2_records if in_s1 and in_s2: print(f"匹配成功 车牌:{plate},传感器1采集时间:{sensor1_records[plate]},传感器2采集时间:{sensor2_records[plate]}") else: print(f"车牌:{plate},no match") if __name__ == "__main__": match_plates()
样例输出
针对给出的输入样例,运行后输出如下:
车牌:RW-MJ-73,no match 车牌:07-SD-12,no match 车牌:GX-62-38,no match 车牌:09-PQ-23,no match 车牌:NG-24-DB,no match 匹配成功 车牌:45-NK-JX,传感器1采集时间:12:00:00,传感器2采集时间:12:00:20 车牌:DX-89-EH,no match 车牌:DG-65-LN,no match 车牌:ZS-24-74,no match
如果需要边读边实时输出结果,只需要在每次存入新记录时,检查当前车牌是否已经在另一个传感器的记录字典中存在即可,不需要等全部数据读完再处理。
内容的提问来源于stack exchange,提问作者Hoi2020
相关产品推荐
相关产品推荐

