You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决嵌套列表求对称差集报错?获取两列表差值方法

如何处理嵌套列表与普通列表的对称差集问题?

你碰到的TypeError: unhashable type: 'list'错误原因很明确——集合要求元素必须是可哈希类型(比如字符串、数字这种不可变对象),但你的temp2里装的都是小列表(像['10.25.16.160']),列表是可变类型,没法被哈希,所以直接转集合肯定报错。

解决思路很简单:先把嵌套的temp2“扁平化”,把里面的字符串IP提取出来,再和temp1一起计算对称差集就行。

具体实现代码

第一种是先扁平化再计算,逻辑清晰:

temp1 = ['10.25.39.70', '10.25.16.160', '10.25.60.156']
temp2 = [['10.25.16.160'], ['10.22.17.180'], ['10.25.39.70']]

# 用列表推导式把嵌套列表拆成普通字符串列表
flattened_temp2 = [ip for sublist in temp2 for ip in sublist]
# 计算对称差集
sym_diff = set(temp1).symmetric_difference(set(flattened_temp2))
# 转成你需要的列表格式
result = list(sym_diff)
print(result)  # 输出: ['10.25.60.156', '10.22.17.180'](顺序可能因集合特性略有不同,但元素正确)

如果想更简洁,也可以直接用集合推导式一步到位:

temp1 = ['10.25.39.70', '10.25.16.160', '10.25.60.156']
temp2 = [['10.25.16.160'], ['10.22.17.180'], ['10.25.39.70']]

sym_diff = set(temp1).symmetric_difference({ip for sublist in temp2 for ip in sublist})
print(list(sym_diff))

这里的对称差集运算symmetric_difference会自动找出两个集合中只在其中一个集合出现的元素,正好匹配你想要的预期结果。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:12:35