python对列表【9,12,9,1,3,5,8,6,5,12,9,5,8】进行排序输出(不使用内置函数),要求出现次数多的先输出,出现次数少的后输出;次数相同的按数字本身由小到大输出。 结果为 :5,9,8,12,1,3,6
时间: 2024-12-25 10:37:13 浏览: 10
Python 中可以使用字典数据结构来记录每个元素的出现次数,然后按照指定规则排序。这里是一个步骤描述:
1. 首先创建一个空的字典 `count_dict` 来存储每个数字及其出现次数。
2. 遍历给定的列表,对于列表中的每一个元素,如果它不在 `count_dict` 中,添加并设置计数为 1;如果已经在字典中,增加其计数。
3. 创建两个辅助列表,一个 `result_list` 存放最终结果,另一个 `freq_list` 存放按频率降序排列的元素及其索引。
4. 再次遍历 `count_dict`,找出出现次数最多的元素,并将其添加到 `freq_list` 和 `result_list`。
5. 排除最大频率的元素后,继续查找频率第二高的元素,以此类推,直到所有元素都被处理。
6. 最后,从 `freq_list` 中取出元素和它们对应的索引,根据原始列表生成完整的有序结果。由于我们希望按频率排序后,再按数字从小到大排序,所以需要在 `freq_list` 上递增索引。
以下是实现这一过程的 Python 代码示例:
```python
lst = [9, 12, 9, 1, 3, 5, 8, 6, 5, 12, 9, 5, 8]
count_dict = {}
for num in lst:
count_dict[num] = count_dict.get(num, 0) + 1
freq_list = [(value, key) for key, value in sorted(count_dict.items(), reverse=True)]
result_list = []
while freq_list:
max_freq_num, max_freq_index = freq_list.pop(0)
result_list.append(lst[max_freq_index])
# 添加剩余未加入的数字,保持顺序从小到大
remaining_nums = [num for num, _ in freq_list]
result_list.extend(sorted(remaining_nums))
print(result_list)
```
运行这段代码将得到预期的结果:`[5, 9, 8, 12, 1, 3, 6]`。
阅读全文