Python:调整代码实现提取首个列表独有元素并按出现次数升序排序
问题解决:提取列表独有序列并按要求排序
需求回顾
现有两个列表:
list_1 = [1,1, 2,2,2, 3,3, 4, 4, 4 ,4, 4, 5,5,5,5] list_2 = [5, 5, 5, 6, 6, 7]
需要完成以下操作:
- 提取仅在list_1中出现、未在list_2中出现的元素
- 组成的新列表按元素在list_1中的出现次数升序排序;若出现次数相同,则按元素本身升序排序
- 期望结果:
[1, 3, 2, 4]
当前代码的问题
你现在的代码已经正确统计了目标元素的出现次数,并且按次数做了初步排序,但存在两个小问题:
- 参数名笔误:
list2_2应该是list_2 - 最终返回的是包含(元素, 次数)的元组列表,而我们需要的是纯元素列表,同时次数相同时没有按元素本身升序排序
修改后的完整代码
def sorted_nums(list_1, list_2): # 提取仅在list_1中存在的元素集合 unique_elements = set(list_1) - set(list_2) # 初始化计数字典 count_dict = dict.fromkeys(unique_elements, 0) # 统计每个目标元素在list_1中的出现次数 for num in list_1: if num in unique_elements: count_dict[num] += 1 return count_dict list_1 = [1,1, 2,2,2, 3,3, 4, 4, 4 ,4, 4, 5,5,5,5] list_2 = [5, 5, 5, 6, 6, 7] # 获取计数字典 count_result = sorted_nums(list_1, list_2) # 排序:先按出现次数升序,次数相同按元素本身升序 sorted_items = sorted(count_result.items(), key=lambda x: (x[1], x[0])) # 提取排序后的元素,组成最终列表 final_result = [item[0] for item in sorted_items] print(final_result) # 输出:[1, 3, 2, 4]
关键修改点
- 修正了参数名的笔误:把
list2_2改成list_2 - 排序的
key改为元组(x[1], x[0]):先按次数(x[1])升序,次数相同时按元素值(x[0])升序,完美匹配需求中的排序规则 - 通过列表推导式从排序后的元组列表中提取元素,转换成期望的纯元素列表格式
内容的提问来源于stack exchange,提问作者jamiek
相关产品推荐
相关产品推荐

