如何在列表中按原位置分别对奇数、偶数进行排序?
实现方案
可以按以下步骤实现你要的排序效果:
- 先从原列表中筛选出所有奇数和偶数,分别对它们进行排序
- 遍历原列表,根据每个位置元素的奇偶性,从排序后的奇数/偶数列表中依次取出元素放回对应位置
代码示例
s = [5, 6, 4, 7, 11, 14, 12, 1, 3] # 提取并排序奇数、偶数 sorted_odds = sorted(num for num in s if num % 2 != 0) sorted_evens = sorted(num for num in s if num % 2 == 0) # 转为迭代器,高效获取下一个元素 odd_iterator = iter(sorted_odds) even_iterator = iter(sorted_evens) # 构建结果列表 result = [] for num in s: if num % 2 != 0: result.append(next(odd_iterator)) else: result.append(next(even_iterator)) print(result) # 输出: [1, 4, 6, 3, 5, 12, 14, 7, 11]
说明
- 这样做既保证了原列表中奇数、偶数的位置完全不变,只是把对应位置的元素替换成排序后的同奇偶元素
- 使用迭代器代替列表
pop(0)操作,避免了频繁的列表元素移位,效率更高
内容的提问来源于stack exchange,提问作者kenj
相关产品推荐
相关产品推荐

