Python将set转为list时报'list' object is not callable错误如何解决
报错原因与解决方案
你遇到的TypeError: 'list' object is not callable报错并非代码逻辑错误,根源是你当前运行环境中,之前曾用list作为变量名赋值(例如写过list = [1,2,3]这类代码),把Python内置的list()构造函数覆盖成了普通列表对象,调用时自然会触发「列表对象不可调用」的报错。
修复当前报错的方法
- 先执行
del list删除你自定义的重名变量,恢复Python内置list()函数的默认功能,之后再运行你写的代码即可正常将集合转换为列表 - 后续编码注意不要用
list、str、int这类Python内置关键字/内置函数名作为自定义变量名,就能避免同类报错
其他实现需求的方法
你的需求是提取仅在第一个列表存在、第二个列表不存在的元素,除了集合求差的方法,还有以下可选方案:
1. 保留原列表顺序+支持保留重复元素
如果需要保留list_1的原有元素顺序,或是list_1中有重复元素需要保留,可使用列表推导式实现:
list_1 = [1,2,3,4,5] list_2 = [2,3] list_3 = [x for x in list_1 if x not in list_2]
如果list_2数据量较大,可先把list_2转为集合提升查找效率:
set_2 = set(list_2) list_3 = [x for x in list_1 if x not in set_2]
2. 集合方法的等价写法
和你原本的集合求差逻辑完全等价的另一种写法:
list_3 = list(set(list_1).difference(set(list_2)))
注意:使用集合方法会自动对
list_1的元素去重,如果你需要保留list_1中的重复元素,不要使用这类方案。
内容的提问来源于stack exchange,提问作者Conweezy
相关产品推荐
相关产品推荐

