Python循环处理det列表无匹配项时如何给对应列表append空字符串
解决方案
你的核心需求是每处理一次det,所有分类列表都必须追加1个元素:匹配到对应前缀就存处理后的内容,没匹配就存空串。原来的代码只对匹配到的前缀对应的列表执行追加操作,未匹配的列表没有新增元素,不符合要求。
可以通过「先统一追加空串,再匹配更新对应列表的最新元素」的逻辑实现,还可以用字典映射前缀和对应列表,避免写大量重复的if/elif判断:
实现代码
# 初始化分类列表和前缀映射 a = [] b = [] c = [] d = [] e = [] f = [] prefix_map = { 'a ': a, 'b ': b, 'c ': c, 'd ': d, 'e ': e, 'f ': f } # 封装为处理det的通用函数,每次传入新的det调用即可 def process_det(det): # 第一步:所有分类列表先默认追加空串,保证每个列表都新增1个元素 for lst in prefix_map.values(): lst.append('') # 第二步:遍历det条目匹配前缀,更新对应列表的最新元素 for item in det: for prefix, lst in prefix_map.items(): if item.startswith(prefix): # 去掉前缀,替换掉刚加的空串 # Python <3.9 可以把removeprefix换成replace(prefix, '', 1) lst[-1] = item.removeprefix(prefix) break # 测试流程 # 第一次处理det det1 = ['b low','c high','f light','e dark'] process_det(det1) # 第二次处理det det2 = ['a letter','c high','d apple','f light'] process_det(det2) # 输出结果 print(f"{a = }") print(f"{b = }") print(f"{c = }") print(f"{d = }") print(f"{e = }") print(f"{f = }")
输出结果
运行后输出和你预期完全一致:
a = ['', 'letter'] b = ['low', ''] c = ['high', 'high'] d = ['', 'apple'] e = ['dark', ''] f = ['light', 'light']
内容的提问来源于stack exchange,提问作者Afonseca
相关产品推荐
相关产品推荐

