如何解决嵌套列表求对称差集报错?获取两列表差值方法
如何处理嵌套列表与普通列表的对称差集问题?
你碰到的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
相关产品推荐
相关产品推荐

