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

Python从含重复元素的元组列表提取每个ID对应最大值三元组

问题说明

输入为四元组格式的列表,每个元素结构为(文件名, ID, 序列名, 强度值),核心需求是按(文件名, ID)组合分组,保留每组内强度值最大的记录,输出去掉强度值的三元组结果,最终保证每个文件名下无重复ID,每个(文件名, ID)组合对应唯一的最大强度序列。
注:原示例输入、输出代码存在两处缺失逗号的语法错误,下述实现中已做修正。

实现方案

方案1:纯Python原生实现(无第三方依赖)

采用单次遍历的字典聚合逻辑,时间复杂度O(n),性能最优,适合数据量较大的场景:

# 修正语法错误后的输入数据
input_data = [
    ("FileName1", "ID1", "Sequence1", 1000),
    ("FileName1", "ID1", "Sequence2", 500),
    ("FileName1", "ID2", "Sequence3", 1500),
    ("FileName1", "ID2", "Sequence5", 200),
    ("FileName2", "ID1", "Sequence1", 500),
    ("FileName2", "ID1", "Sequence2", 1000),
    ("FileName2", "ID2", "Sequence3", 250),
    ("FileName2", "ID2", "Sequence5", 2000)
]

group_map = {}
for file_name, seq_id, seq, intensity in input_data:
    group_key = (file_name, seq_id)
    # 分组不存在或当前记录强度更大时,更新分组存储值
    if group_key not in group_map or intensity > group_map[group_key][1]:
        group_map[group_key] = (seq, intensity)

# 组装为要求的输出格式
output = [
    (file_name, seq_id, seq)
    for (file_name, seq_id), (seq, _) in group_map.items()
]

运行后得到的output与预期结果完全一致:

[
    ('FileName1', 'ID1', 'Sequence1'),
    ('FileName1', 'ID2', 'Sequence3'),
    ('FileName2', 'ID1', 'Sequence2'),
    ('FileName2', 'ID2', 'Sequence5')
]

方案2:Pandas实现(适配后续DataFrame处理流程)

如果后续需要做数据框相关操作,直接用pandas处理流程更顺畅,和下游逻辑衔接成本最低:

import pandas as pd

# 读取为DataFrame并指定列名
df = pd.DataFrame(
    input_data,
    columns=["FileName", "ID", "Sequence", "Intensity"]
)

# 按强度降序排序后,按(FileName, ID)去重保留首条(即强度最大的记录),再删除强度列
result_df = df.sort_values(by="Intensity", ascending=False)\
              .drop_duplicates(subset=["FileName", "ID"], keep="first")\
              .drop(columns=["Intensity"])

# 如需转回元组列表格式,可直接执行下述代码
output = list(result_df.itertuples(index=False, name=None))

注意事项

  • 若同一(FileName, ID)分组下存在多条强度值完全相等的最大值记录,上述两种方案默认保留遍历/排序时遇到的第一条;如果需要自定义平局判定规则,可在更新判断逻辑、排序逻辑中增加对应字段的比较规则即可。
  • 处理完成后每个FileName下的ID唯一,完全符合后续入库、分析的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:27:33