如何修正Python代码以按指定规则从嵌套列表筛选元组?
按对应位置对比筛选元组列表
原始数据
data = [ [(1, 1, 0, ['EARTH']), (1, 2, 0, ['SUGLINOK'])], [(2, 1, 0, ['EARTH']), (2, 2, 0, ['PESOCHEK'])], [(3, 1, 0, ['EARTH']), (3, 2, 0, ['SUGLINOK'])] ]
筛选逻辑
- 第一个子列表的所有元组直接加入结果
- 从第二个子列表开始,每个元组仅与前一个子列表对应位置的元组对比描述(即元组第4个元素):
- 描述不同则加入结果
- 描述相同则跳过
预期结果
result = [(1, 1, 0, ['EARTH']), (1, 2, 0, ['SUGLINOK']), (2, 2, 0, ['PESOCHEK']), (3, 2, 0, ['SUGLINOK'])]
原代码问题
原代码错误地遍历了所有已加入结果的元组做对比,而需求是仅和前一个子列表对应位置的元组对比,并非所有历史结果。
修正后的代码
data = [ [(1, 1, 0, ['EARTH']), (1, 2, 0, ['SUGLINOK'])], [(2, 1, 0, ['EARTH']), (2, 2, 0, ['PESOCHEK'])], [(3, 1, 0, ['EARTH']), (3, 2, 0, ['SUGLINOK'])] ] result = [] # 先加入第一个子列表的所有元素 result.extend(data[0]) # 从第二个子列表开始遍历 for i in range(1, len(data)): current_sublist = data[i] prev_sublist = data[i-1] # 按位置逐个对比 for idx, current_point in enumerate(current_sublist): prev_point = prev_sublist[idx] # 对比描述部分(元组第4个元素) if current_point[3] != prev_point[3]: result.append(current_point) print(result)
代码说明
- 先将第一个子列表的所有元素加入结果,满足前两项需求
- 从索引1开始遍历后续子列表,每个子列表与前一个子列表按索引位置一一对应
- 对比对应位置元组的描述部分,不同则加入结果,严格符合需求逻辑
内容的提问来源于stack exchange,提问作者Edward Zotov
相关产品推荐
相关产品推荐

