如何让嵌套列表的首个元素匹配另一列表的元素顺序?
按指定列表顺序重排嵌套列表
需求是将嵌套列表list2中的子元素,按照list1里元素的顺序重新排列,使得每个子列表的首个元素与list1对应位置的元素一致。
示例数据
list1 = [3, 7, 1, 10, 4] list2 = [[1,0],[3,2],[4,11],[7,9],[10,1]] # 目标结果 newlist = [[3,2],[7,9],[1,0],[10,1],[4,11]]
高效解决方案:字典映射法
利用字典的O(1)查找特性,先构建list2的元素映射,再按list1顺序生成新列表:
list1 = [3, 7, 1, 10, 4] list2 = [[1,0],[3,2],[4,11],[7,9],[10,1]] # 构建首个元素到子列表的映射 item_dict = {sublist[0]: sublist for sublist in list2} # 按list1顺序提取对应子列表 newlist = [item_dict[num] for num in list1] print(newlist)
这种方法时间复杂度为O(n+m)(n是list2长度,m是list1长度),处理大数据量时效率远高于遍历查找。如果list1中存在list2没有的元素,可以用item_dict.get(num, [])替代,避免抛出KeyError。
简洁解决方案:遍历查找法
如果数据量较小,也可以直接用列表推导式结合遍历查找:
newlist = [next(sublist for sublist in list2 if sublist[0] == num) for num in list1]
这种方法代码更简洁,但每次查找都要遍历list2,时间复杂度为O(n*m),数据量大时不建议使用。
内容的提问来源于stack exchange,提问作者nsp077
相关产品推荐
相关产品推荐

