Python如何参照参考列表同步对对应列表执行排序、去重操作
Python 等长关联列表同步操作实现方案
1. 主列表排序时同步调整关联列表顺序
核心逻辑是将两个列表对应索引的元素绑定为元组,对绑定后的元组序列排序后再拆分,Python原生排序会默认按元组第一个元素(即主列表的排序值)升序排列,完全匹配需求。
示例原始数据(注意原示例中列表B的字符元素需加引号定义为字符串,否则会被识别为未定义变量):
listA = [7,6,3,2,1,4,5] listB = ['a','b','c','d','e','f','g']
实现代码:
# 打包配对元素后排序 sorted_pair = sorted(zip(listA, listB)) # 拆分排序后的配对序列,直接转换为列表类型 listA_new, listB_new = map(list, zip(*sorted_pair))
运行后得到的结果完全符合预期:
listA_new值为[1, 2, 3, 4, 5, 6, 7]listB_new值为['e', 'd', 'c', 'f', 'g', 'b', 'a']
如果需要自定义排序规则,只需要给sorted()传入key参数即可,比如要按主列表值倒序排,加reverse=True就能实现。
2. 主列表去重时同步删除关联列表对应元素
核心逻辑是遍历两个列表的配对元素,用集合记录主列表已经出现过的值,仅保留主列表值第一次出现时对应的配对元素,自动跳过重复项。
示例原始数据:
listC = [1,1,4,4,5,6,7] listD = ['a','b','c','d','e','f','g']
实现代码:
seen = set() listC_new = [] listD_new = [] for c_item, d_item in zip(listC, listD): if c_item not in seen: seen.add(c_item) listC_new.append(c_item) listD_new.append(d_item)
运行后结果和需求完全匹配:
listC_new值为[1, 4, 5, 6, 7]listD_new值为['a', 'c', 'e', 'f', 'g']
注意:上述两种方法都要求传入的两个列表长度严格一致,否则
zip会自动截断到较短列表的长度,导致结果缺失元素。
内容的提问来源于stack exchange,提问作者Martin Kunze
相关产品推荐
相关产品推荐

