You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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]

当前代码的问题

你现在的代码已经正确统计了目标元素的出现次数,并且按次数做了初步排序,但存在两个小问题:

  1. 参数名笔误:list2_2应该是list_2
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:18:11