如何提取列表奇数并排序反转后放回原位置生成合并列表
数组奇数排序反转后归位的实现方案
需求梳理
核心操作分为三步:
- 从原数组中筛选出所有奇数
- 对奇数列表先排序再反转(等价于直接降序排序)
- 将处理后的奇数按原数组中奇数的位置依次替换,偶数位置保留原数值不变
修正后的代码实现
def sort_array(array): # 提取奇数并完成排序+反转(降序排序一步到位) processed_odds = sorted((num for num in array if num % 2 != 0), reverse=True) # 转为迭代器,方便逐个取出处理后的奇数 odd_generator = iter(processed_odds) # 遍历原数组,替换奇数位置的元素 return [next(odd_generator) if num % 2 != 0 else num for num in array]
代码说明
- 提取并处理奇数:用生成器表达式提取原数组中的奇数(比列表推导式更节省内存),通过
sorted(..., reverse=True)直接完成升序排序后反转的操作,一步到位效率更高。 - 迭代器替换:把处理后的奇数转为迭代器,遍历原数组时可逐个取出元素,无需手动维护索引。
- 生成结果数组:通过列表推导式遍历原数组,遇到奇数就从迭代器中取出处理后的元素,偶数直接保留原数值,最终得到符合要求的数组。
示例测试
输入:[5, 2, 9, 4, 3, 6]
- 提取奇数:
[5,9,3] - 处理后奇数:
[9,5,3](排序后反转/降序排序结果) - 最终输出:
[9, 2, 5, 4, 3, 6]
内容的提问来源于stack exchange,提问作者SHARDloh
相关产品推荐
相关产品推荐

