基于指定列表顺序排序目标列表的Python代码问题排查
问题排查与修复方案
现有代码问题
- 代码中的
counter变量全程未更新,始终取值为0,因此仅会匹配array2的第一个元素0,遍历array1后仅能得到所有0元素,就是你看到的[0,0,0,0]结果 - 没有按照
array2的排序规则,依次处理后续的1、-1两个元素的匹配逻辑
修复方案
基础实现(易理解)
外层先遍历array2的每个排序基准值,内层遍历array1收集所有和当前基准值相等的元素,依次拼接即可:
def patternSort(arr1, arr2): res = [] # 按array2的顺序逐个处理基准值 for standard in arr2: for num in arr1: if num == standard: res.append(num) print(res)
优化实现(性能更高)
如果array1数据量较大,可先统计array1各元素的出现次数,再按array2顺序批量生成结果,只需遍历两次列表即可完成:
from collections import Counter def patternSort(arr1, arr2): num_count = Counter(arr1) res = [] for standard in arr2: # 批量追加当前基准值的所有匹配元素 res.extend([standard] * num_count[standard]) print(res)
测试运行
调用你提供的测试用例:
array1 = [1, 0, -1, 0, 0, 1, 1, -1, 0, 1] array2 = [0, 1, -1] patternSort(array1, array2)
输出结果为:[0, 0, 0, 0, 1, 1, 1, 1, -1, -1],符合预期。
内容的提问来源于stack exchange,提问作者sadboy99
相关产品推荐
相关产品推荐

