Python查找嵌套列表差异元素时遇TypeError报错的解决方法
问题分析与解决
错误原因
你的列表推导式语法逻辑错误:J1 not in J2会返回一个布尔值(True),而列表推导式中for i in后需要传入可迭代对象,遍历布尔值自然触发TypeError: 'bool' object is not iterable。
另外,你的需求是找出J1子列表中不在J2子列表里的元素,但原代码没有正确提取嵌套列表中的子元素进行比较。
解决方案
纯Python实现
直接提取嵌套列表中的子列表,通过列表推导式筛选符合条件的元素:
J1 = [[1, 2, 4, 6, 7, 9, 10]] J2 = [[0, 2, 0, 6, 7, 9, 10]] # 取出嵌套的子列表 inner_j1 = J1[0] inner_j2 = J2[0] # 筛选inner_j1中不在inner_j2的元素,再嵌套为列表 J = [[num for num in inner_j1 if num not in inner_j2]] print(J)
运行结果:
[[1, 4]]
Numpy实现(利用你导入的numpy库)
如果需要用numpy处理,可以借助np.isin函数快速筛选:
import numpy as np J1 = [[1, 2, 4, 6, 7, 9, 10]] J2 = [[0, 2, 0, 6, 7, 9, 10]] # 转换为numpy数组 arr_j1 = np.array(J1[0]) arr_j2 = np.array(J2[0]) # 筛选不在arr_j2中的元素 filtered = arr_j1[~np.isin(arr_j1, arr_j2)] # 转换为嵌套列表格式 J = [filtered.tolist()] print(J)
运行结果同样符合预期。
内容的提问来源于stack exchange,提问作者bekarhunmain
相关产品推荐
相关产品推荐

