如何检查列表B元素是否在列表A中并生成指定长度结果列表?
问题描述
有两个列表:
A = ['1', '2', '3', '4', '5'] B = ['0', '1', '9', '3', '0']
需要检查列表B中的每个元素是否存在于列表A中,生成结果列表C:元素存在则保留原值,不存在则返回空字符串'',期望结果为:
C = ['', '1', '', '3', '']
用for循环尝试实现时,因循环逻辑错误,得到了元素数量翻倍的错误结果:
C = ['', '1', '', '', '', '', '', '', '3', ''...]
需要修正逻辑,得到长度为5的目标结果列表。
解决方法
1. 修正基础for循环逻辑
你之前的错误大概率是嵌套遍历了A和B,导致每个B的元素都触发多次追加操作。正确的逻辑是只遍历B的每个元素,逐个判断是否在A中:
A = ['1', '2', '3', '4', '5'] B = ['0', '1', '9', '3', '0'] C = [] for item in B: if item in A: C.append(item) else: C.append('') print(C) # 输出: ['', '1', '', '3', '']
2. 简洁的列表推导式实现
Python里可以用列表推导式一行完成,逻辑更紧凑:
A = ['1', '2', '3', '4', '5'] B = ['0', '1', '9', '3', '0'] C = [item if item in A else '' for item in B] print(C) # 输出: ['', '1', '', '3', '']
3. 优化查找效率(可选)
如果列表A的元素数量较多,item in A的查找速度会变慢。可以把A转换成集合,集合的查找操作是O(1)复杂度,效率更高:
A = ['1', '2', '3', '4', '5'] B = ['0', '1', '9', '3', '0'] A_set = set(A) C = [item if item in A_set else '' for item in B] print(C) # 输出: ['', '1', '', '3', '']
内容的提问来源于stack exchange,提问作者ali alae
相关产品推荐
相关产品推荐

