Python匹配姓名列表指定称谓生成新列表的逻辑错误如何解决
错误原因
代码出错的核心逻辑问题是:
- 对列表A中的每个条目,都会完整遍历列表B的所有3个称谓,每一轮遍历不管匹配成功/失败,都会往C里加一条数据,最终每个A的条目会对应3条C的记录,总长度达到15,和预期的5条不符
- 即使某个条目匹配到了正确的称谓,后续剩下的B元素遍历还是会触发不匹配的分支,把整个条目重复加入C
解决方法
可以用Python的for...else语法实现需求:遍历B的所有称谓,只要找到匹配的就把称谓加入C并终止当前条目的遍历;如果遍历完所有B的称谓都没找到匹配,就把整条A的条目加入C。
修正后的代码如下:
A = [ 'Anna, Mrs. James (Nadia Elf)', 'Martin, Mr. Michael', 'Barese, Mr. Alfred', 'Amalfi, Mrs. Abby (J E V)', 'Manuel, card. Louis' ] C = [] B = ['Mrs.', 'Mr.', 'Dr.'] for i in A: for j in B: if j in i: C.append(j) break # 匹配到就跳出内层循环,不再遍历剩余称谓 else: # 内层循环完整走完没触发break,说明没有匹配的称谓 C.append(i) print(C)
运行后输出结果和预期完全一致:['Mrs.', 'Mr.', 'Mr.', 'Mrs.', 'Manuel, card. Louis']
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

