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

Python子列表修剪问题:提取至前10个唯一元素位置

修正子列表修剪逻辑:每个子列表独立统计前10个唯一元素

问题分析

现有列表normalized_result_lists包含多个子列表,需求是对每个子列表单独处理:识别该子列表的前10个唯一元素,然后将子列表修剪到第10个唯一元素出现的最后位置(保留该元素的所有出现项)。

原代码的核心问题:全局定义的unique_elements集合会在处理第一个子列表后积累满10个唯一元素,导致处理第二个子列表时,刚添加第一个元素就触发终止条件,最终得到错误的[1.0]结果。

修正后的代码

normalized_result_lists = [
    [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
    1.0012468827930174, 1.0024937655860349, 1.0049875311720697, 1.0087281795511223,
    1.0112219451371571, 1.0187032418952617, 1.0224438902743143, 1.0286783042394014,
    1.0299251870324189, 2.0, 3.0],
    [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
    1.0013812154696133, 1.0013812154696133, 1.0055248618784531, 1.0055248618784531,
    1.0055248618784531, 1.0096685082872927, 1.0138121546961325, 1.0179558011049723,
    1.020718232044199, 1.0248618784530388, 1.031767955801105, 1.0414364640883977,
    1.0524861878453038, 1.0607734806629834, 1.0662983425414365]
]

trimmed_lists = []

for lst in normalized_result_lists:
    trimmed_list = []
    # 每个子列表单独维护自己的唯一元素集合
    unique_elements = set()
    for elem in lst:
        trimmed_list.append(elem)
        unique_elements.add(elem)
        
        if len(unique_elements) == 10:
            break
    
    trimmed_lists.append(trimmed_list)

print(trimmed_lists)

关键修正点

  • 将unique_elements的定义移到子列表的循环内部,确保每个子列表都有独立的唯一元素统计集合,完全隔离不同子列表的数据。
  • 其余逻辑保持不变:遍历子列表元素时,先添加到修剪后的列表,再将元素加入唯一集合,当集合大小达到10时终止当前子列表的遍历。

运行修正后的代码,会得到与预期完全一致的结果:第一个子列表保留到第10个唯一元素1.0299251870324189的位置;第二个子列表保留到第10个唯一元素1.020718232044199的位置。

内容的提问来源于stack exchange,提问作者Dbatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:11:27