Python查找列表缺失元素触发TypeError错误,求解决方法
解决列表推导式报错:查找J10中不存在于J2的元素
你的代码触发TypeError是因为列表推导式的语法错误。J=[i for i in J10 not in J2]会先执行J10 not in J2,这个表达式返回布尔值False,随后代码试图遍历这个布尔值——而布尔值属于不可迭代对象,因此报错。
方法1:修正列表推导式语法
正确的写法是先遍历J10的元素,再添加条件判断:
J2 = [128, 4, 6, 7, 8, 9, 10] J10 = [4, 6, 7, 8, 9, 10, 13, 128] J = [i for i in J10 if i not in J2] print(J)
运行结果:
[13]
方法2:用集合优化查询效率
如果列表元素数量较多,集合的成员查询(in)效率远高于列表,可以先将J2转换为集合:
J2 = [128, 4, 6, 7, 8, 9, 10] J10 = [4, 6, 7, 8, 9, 10, 13, 128] J2_set = set(J2) J = [i for i in J10 if i not in J2_set] print(J)
也可以直接用集合的差集操作(注意:差集结果是无序的,若需要保留原列表顺序,优先用列表推导式):
J2 = [128, 4, 6, 7, 8, 9, 10] J10 = [4, 6, 7, 8, 9, 10, 13, 128] J = list(set(J10) - set(J2)) print(J)
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

