如何在Python 3中提取两个嵌套列表的差异元素并生成新列表?
提取两个嵌套列表对应位置不同元素的实现方法
你遇到的问题很明确——原代码是在对比整个子列表,而不是逐个元素检查对应位置的差异,所以才会返回整个子列表,而不是你想要的单个元素集合。
咱们直接来看正确的实现方式:
基础循环实现
这种方式逻辑清晰,适合新手理解:
list_1 = [[5, 3, 4], [1, 5, 8], [6, 4, 2]] list_2 = [[8, 3, 4], [1, 5, 9], [6, 7, 2]] result = [] # 先把两个列表的对应子列表配对 for sub_list1, sub_list2 in zip(list_1, list_2): # 再对子列表里的每个对应元素逐一比较 for num1, num2 in zip(sub_list1, sub_list2): if num1 != num2: # 把两个不同的元素都加入结果 result.append(num1) result.append(num2) print(result) # 输出: [5, 8, 8, 9, 4, 7]
简洁的列表推导式
如果喜欢更紧凑的代码,可以用列表推导式一步完成:
list_1 = [[5, 3, 4], [1, 5, 8], [6, 4, 2]] list_2 = [[8, 3, 4], [1, 5, 9], [6, 7, 2]] result = [ num for sub1, sub2 in zip(list_1, list_2) for num1, num2 in zip(sub1, sub2) if num1 != num2 for num in (num1, num2) ] print(result) # 同样得到: [5, 8, 8, 9, 4, 7]
为什么你的原代码不对?
你之前的代码是遍历list_2的子列表,判断整个子列表是否在list_1中——比如[8, 3, 4]确实不在list_1里,所以会把整个子列表添加到storer中。但你的需求是对比对应位置的单个元素,所以必须把遍历的粒度细化到每个元素,而不是子列表级别。
内容的提问来源于stack exchange,提问作者Mahir Islam
相关产品推荐
相关产品推荐

